如何查找序列中两个日期之间的时间差(秒)?如何查找prolog中两个日期之间的时间差(秒)?
datetime(2001,03,04,23,00,32)。
datetime(2001,03,04,23,01,33)。
timediff(D1,D2,Sec)。
秒= 61
如何查找序列中两个日期之间的时间差(秒)?如何查找prolog中两个日期之间的时间差(秒)?
datetime(2001,03,04,23,00,32)。
datetime(2001,03,04,23,01,33)。
timediff(D1,D2,Sec)。
秒= 61
这会有点别扭什么与不是几个月相同的长度和闰年有额外的天。
要开始为您送行,我要去给你一个版本谓词只会考虑到小时,分钟和秒:
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倒退,这个过程会容易得多,因为它可以让你使用操作系统的时间转换程序而不是自己编写程序。
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.
其中的Prolog提供convert_time/2和convert_time/8? – Kaarel 2011-03-29 08:50:49
@Kaarel:SWI-Prolog,虽然我看到GNU Prolog和Sicstus Prolog没有。 – Raceimaztion 2011-03-29 19:59:30
对,昨天我在SWI-Prolog中找不到它,因为help(convert_time)没有返回任何东西。原因是convert_time已被弃用,请改用format_time/3和stamp_date_time/3。 – Kaarel 2011-03-30 09:27:08