2011-03-27 56 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. 
相关问题