Datetime 如何在prolog中找到两个日期之间的时间差(以秒为单位)?
如何在prolog中找到两个日期之间的时间差(以秒为单位) 日期时间(2001,03,04,23,00,32) 日期时间(2001,03,04,23,01,33) 时间差(D1,D2,秒)Datetime 如何在prolog中找到两个日期之间的时间差(以秒为单位)?,datetime,prolog,Datetime,Prolog,如何在prolog中找到两个日期之间的时间差(以秒为单位) 日期时间(2001,03,04,23,00,32) 日期时间(2001,03,04,23,01,33) 时间差(D1,D2,秒) Sec=61这有点尴尬,因为月份的长度不一样,闰年有额外的天数 首先,我将给出一个谓词的版本,它只考虑小时、分钟和秒: timediff(time(Hours1, Minutes1, Seconds1), time(Hours2, Minutes2, Seconds2), Seconds) :- Se
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提供了几个谓词,可以将人类可读的时间表示从历元(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:SWI-Prolog是肯定的,尽管我看到GNU-Prolog和Sicstus-Prolog没有。对,昨天我在SWI-Prolog中找不到它,因为帮助(convert_-time)没有返回任何内容。原因是convert_time已被弃用,请改用format_time/3和stamp_date_time/3。