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

时间:2011-03-27 09:26:50

标签: datetime prolog

如何在prolog中找到两个日期之间的时差(

日期时间(2001,03,04,23,00,32)。

日期时间(2001,03,04,23,01,33)。

timeDiff测量(D1,D2,秒)。

秒= 61

2 个答案:

答案 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,这个过程会更容易,因为它允许你使用操作系统的时间转换例程而不是自己编写。