如何在prolog中找到两个日期之间的时差(
)日期时间(2001,03,04,23,00,32)。
日期时间(2001,03,04,23,01,33)。
timeDiff测量(D1,D2,秒)。
秒= 61
答案 0 :(得分:1)
SWI-Prolog提供了几种谓词,可将人类可读的时间表示转换为Epoch(1970-01-01)的秒数。将时间表示为秒数将差值计算转换为简单的减法运算。例如:
timediff(DateTime1, DateTime2, Sec) :-
date_time_stamp(DateTime1, TimeStamp1),
date_time_stamp(DateTime2, TimeStamp2),
Sec is TimeStamp2 - TimeStamp1.
用法:
?- timediff(date(2001, 03, 04, 23, 0, 32, 0, -, -),
date(2001, 03, 04, 23, 1, 33, 0, -, -), Sec).
Sec = 61.0.
答案 1 :(得分:0)
这有点尴尬,因为月份长度不同,闰年有额外的天数。
为了让你开始,我将为你提供一个只考虑小时,分钟和秒钟的谓词版本:
timediff(time(Hours1, Minutes1, Seconds1), time(Hours2, Minutes2, Seconds2), Seconds) :-
Seconds is Seconds1-Seconds2 + 60*(Minutes1-Minutes2 + 60*(Hours1-Hours2)).
如果你可以向后运行convert_time / 2或convert_time / 8,这个过程会更容易,因为它允许你使用操作系统的时间转换例程而不是自己编写。