如何查找序列中兩個日期之間的時間差(秒)?如何查找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