如何在prolog中获取当前系统年份作为数字.我找到了这个.但它把这一年作为一个字符串.
today(Today) :- get_time(X), format_time(atom(Today), '%Y', X).
Run Code Online (Sandbox Code Playgroud)
谢谢.
正如mbratch在我的回答评论中指出的那样,format_time/3用于显示日期和时间值.如果我只是需要的数据,我不会用format_time/3,而是stamp_date_time/3和date_time_value/3时间标志转换成你需要的值.有关相关谓词的文档可以在这里找到.
要获得当前年份,这样的谓词就足够了:
year(Year) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(year, DateTime, Year).
Run Code Online (Sandbox Code Playgroud)
以下是对使用的内置谓词的描述:
get_time/2给出一个表示自Unix Epoch以来经过的时间的浮点数.stamp_date_time/3date/9根据第三个参数指示的时区将戳记转换为术语.当时区参数为时,local它获取您的系统所在的时区是本地的.一个例子date/9:
date(2014,3,28,8,8,59.30211305618286,21600,'MDT',true)
date_time_value/3:允许您从date/9术语中提取值(因此您不必执行愚蠢的操作,例如date(Year,_,_,_,_,_,_,_,_)获取简单的值).
您的问题要求年份,但您的示例谓词看起来像是描述今天的日期,如下所示:
today(Today) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(date, DateTime, Today).
Run Code Online (Sandbox Code Playgroud)
使用date关键字,date_time_value/3将实例化为Today一个术语date/3,持有年,月和日:例如,date(2014, 3, 29).
实际上,有些愚蠢的是,库需要三个语句才能获得一个共同的日期时间值,所以如果你经常处理时间和日期,你可能只想使用像它这样的通用谓词
get_date_time_value(Key, Value) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(Key, DateTime, Value).
Run Code Online (Sandbox Code Playgroud)
这将返回对应于给定的当前数值Key:
?- get_date_time_value(day, X).
X = 29.
?- get_date_time_value(year, X).
X = 2014.
?- get_date_time_value(date, X).
X = date(2014, 3, 29).
Run Code Online (Sandbox Code Playgroud)