Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在prolog中处理日期_Date_Datetime_Prolog_Stamp - Fatal编程技术网

Date 在prolog中处理日期

Date 在prolog中处理日期,date,datetime,prolog,stamp,Date,Datetime,Prolog,Stamp,如何制作一个程序,在其中插入一个日期,然后再添加几天(假设+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]')

如何制作一个程序,在其中插入一个日期,然后再添加几天(假设+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.

构建模块都在那里:

?-日期时间戳(日期(2020,4,15,0,0,0,关闭,TZ,DST),时间戳)。
关=-7200,
TZ=‘CEST’,
DST=真,
时间戳=1586901600.0。
?-NDays=20,接下来是$TimeStamp+60*60*24*NDays。
NDays=20,
Next=1588629600.0,
时间戳=1586901600.0。
?盖章日期时间($Next、DT、local)。
DT=日期(2020年5月5日0月0日0.0日-7200日,CEST,真实),
Next=1588629600.0。
符号
$TimeStamp
是REPL(即交互式解释器)的SWI Prolog便捷功能,它为我们提供变量
TimeStamp
绑定的最后一个值

显然,最好将复杂性封装在自己的应用程序界面中

文档还提示了另一种方法,只需将天数添加到date/9结构的day字段中,即可获得适当的时间戳

那么整个可能是:

将:-
写入('将日期输入为'YYYY-MM-DD.`:'),
读取(YYYY-MM-DD),
D1为DD+20,
日期时间戳(日期(YYYY,MM,D1,0,0,0,u,u,u,u),戳),
盖章日期时间(盖章、D、本地),
日期时间值(日期,D,DV),
格式('结果日期:~w',[DV])。

构建块都在那里:

?-日期时间戳(日期(2020,4,15,0,0,0,关闭,TZ,DST),时间戳)。
关=-7200,
TZ=‘CEST’,
DST=真,
时间戳=1586901600.0。
?-NDays=20,接下来是$TimeStamp+60*60*24*NDays。
NDays=20,
Next=1588629600.0,
时间戳=1586901600.0。
?盖章日期时间($Next、DT、local)。
DT=日期(2020年5月5日0月0日0.0日-7200日,CEST,真实),
Next=1588629600.0。
符号
$TimeStamp
是REPL(即交互式解释器)的SWI Prolog便捷功能,它为我们提供变量
TimeStamp
绑定的最后一个值

显然,最好将复杂性封装在自己的应用程序界面中

文档还提示了另一种方法,只需将天数添加到date/9结构的day字段中,即可获得适当的时间戳

那么整个可能是:

将:-
写入('将日期输入为'YYYY-MM-DD.`:'),
读取(YYYY-MM-DD),
D1为DD+20,
日期时间戳(日期(YYYY,MM,D1,0,0,0,u,u,u,u),戳),
盖章日期时间(盖章、D、本地),
日期时间值(日期,D,DV),
格式('结果日期:~w',[DV])。

你能展示一下你的尝试并解释一下它的缺点吗?我发现下面的代码:goes:-写(“请输入你的生日[YYYY-MM-DD]”),nl,读字符串(生日),解析时间(生日,邮票),邮票日期时间(邮票,日期时间,'UTC'),日期时间=日期(年,月,日,年),打印(年),nl,打印('Month:'),打印(Month),nl,打印('Day:'),打印(Day),nl。读取字符串(字符串):-当前输入(输入),读取行到代码(输入,代码),字符串代码(字符串,代码)。得到这个:?-开始。请输入您的生日[YYYY-MM-DD]|:2010-07-05。错误。您使用的Prolog的哪个版本具有这些预定义谓词?@CalinBorzin-请不要在注释中添加代码。那里几乎没有用。编辑你的问题(就像我做的那样)。@CalinBorzin-哪个谓词导致你的程序失败?你能展示一下你的尝试并解释它是如何失败的吗?我发现下面的代码:goes:-写('请输入你的生日[YYYY-MM-DD]')、nl、读字符串(生日)、解析时间(生日,戳记)、戳记日期时间(戳记,日期时间,'UTC'),DateTime=日期(年、月、日、日、打印('Year:')、打印(Year)、nl、打印('Month:')、打印(Month)、nl、打印('Day:')、打印(Day:')、打印(Day)、nl。读取字符串(字符串):-当前输入(输入),读取行到代码(输入,代码),字符串代码(字符串,代码)。得到这个:?-开始。请输入您的生日[YYYY-MM-DD]|:2010-07-05。错误。您使用的Prolog的哪个版本具有这些预定义谓词?@CalinBorzin-请不要在注释中添加代码。那里几乎没有用。编辑你的问题(和我一样)。@CalinBorzin-哪个谓词导致你的程序失败?