2011-03-27 87 views

回答

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倒退,這個過程會容易得多,因爲它可以讓你使用操作系統的時間轉換程序而不是自己編寫程序。

+0

其中的Prolog提供convert_time/2和convert_time/8? – Kaarel 2011-03-29 08:50:49

+0

@Kaarel:SWI-Prolog,雖然我看到GNU Prolog和Sicstus Prolog沒有。 – Raceimaztion 2011-03-29 19:59:30

+0

對,昨天我在SWI-Prolog中找不到它,因爲help(convert_time)沒有返回任何東西。原因是convert_time已被棄用,請改用format_time/3和stamp_date_time/3。 – Kaarel 2011-03-30 09:27:08

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. 
相關問題