0

如何制作一个可以插入日期的程序,然后添加几天(假设+ 20天)以获得新日期?

例子:

?- write a date in this format(YYYY-MM-DD.): 2020-01-15.
The new date is : 2020-02-04

我认为我应该使用这个预定义的谓词:日期时间戳、时间戳日期时间和日期时间值,但我没有成功管理它。

我发现下面的代码:

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.
4

1 回答 1

2

构建块都在那里:

?- 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]).
于 2020-04-15T05:41:10.273 回答