如何编写一个程序,你可以在其中插入一个日期,然后添加一些天(假设+ 20天)来获得一个新的日期?
示例:
?- write a date in this format(YYYY-MM-DD.): 2020-01-15.
The new date is : 2020-02-04我认为我应该使用这个预定义的谓词: date time stamp、stamp date time和date time value,但我没有成功地管理它。
我找到了下面的代码:
goes :-
write('Please enter your birthday [YYYY-MM-DD]'),
nl,
read_string(Birthday),
parse_time(Birthday, Stamp),
stamp_date_time(Stamp, DateTime, 'UTC'),
DateTime = date(Year, Month, Day, _, _, _, _, _, _),
print('Year: '), print(Year), nl,
print('Month: '), print(Month), nl,
print('Day: '), print(Day), nl.
read_string(String) :-
current_input(Input),
read_line_to_codes(Input, Codes),
string_codes(String, Codes).并获得以下内容:
?- goes.
Please enter your birthday [YYYY-MM-DD] |: 2010-07-05.
false.发布于 2020-04-15 13:41:10
构建块都在那里:
?- date_time_stamp(date(2020,4,15,0,0,0,Off,TZ,DST),TimeStamp).
Off = -7200,
TZ = 'CEST',
DST = true,
TimeStamp = 1586901600.0.
?- NDays=20,Next is $TimeStamp+60*60*24*NDays.
NDays = 20,
Next = 1588629600.0,
TimeStamp = 1586901600.0.
?- stamp_date_time($Next,DT,local).
DT = date(2020, 5, 5, 0, 0, 0.0, -7200, 'CEST', true),
Next = 1588629600.0.符号$TimeStamp是REPL (即交互式解释器)的SWI-Prolog特性,它为我们提供了变量TimeStamp已绑定的最后一个值。
显然,您最好将复杂性封装在您自己的应用程序接口中。
文档还提示了一种不同的方法,只需将天数添加到date/9结构的day字段,即可获得适当的时间戳。
那么整个过程可能是:
goes :-
write('enter date as `YYYY-MM-DD.`:'),
read(YYYY-MM-DD),
D1 is DD+20,
date_time_stamp(date(YYYY,MM,D1,0,0,0,_,_,_),Stamp),
stamp_date_time(Stamp,D,local),
date_time_value(date,D,DV),
format('result date:~w', [DV]).https://stackoverflow.com/questions/61218340
复制相似问题