首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >prolog中的date处理

问prolog中的date处理
EN

Stack Overflow用户
提问于 2020-04-15 06:30:28
回答 1查看 683关注 0票数 0

如何编写一个程序,你可以在其中插入一个日期,然后添加一些天(假设+ 20天)来获得一个新的日期?

示例:

代码语言:javascript
复制
?- 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,但我没有成功地管理它。

我找到了下面的代码:

代码语言:javascript
复制
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).

并获得以下内容:

代码语言:javascript
复制
?- goes.
Please enter your birthday [YYYY-MM-DD] |: 2010-07-05.
false.
EN

回答 1

Stack Overflow用户

发布于 2020-04-15 13:41:10

构建块都在那里:

代码语言:javascript
复制
?- 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字段,即可获得适当的时间戳。

那么整个过程可能是:

代码语言:javascript
复制
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]).
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61218340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档