Datetime 如何在prolog中找到两个日期之间的时间差(以秒为单位)?

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

如何在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) :-
    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。