如何将当前系统年份作为prolog中的数字。 我找到了这个。 但它把这一年作为一个字符串。
today(Today) :- get_time(X), format_time(atom(Today), '%Y', X).
感谢。
答案 0 :(得分:8)
正如mbratch在我的回答评论中指出的那样,format_time/3
用于显示日期和时间值。如果我只需要数据,则不会使用format_time/3
,而是使用stamp_date_time/3
和date_time_value/3
将时间戳转换为您需要的值。可以找到相关谓词的文档here。
要获得当前年份,这样的谓词就足够了:
year(Year) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(year, DateTime, Year).
以下是对使用的内置谓词的描述:
get_time/2
给出一个浮点数,表示自Unix Epoch以来经过的时间。 stamp_date_time/3
根据第三个参数指示的时区将戳记转换为术语date/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).
使用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).
将返回与给定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).