Как я могу найти разницу времени в секундах между двумя датами в прологе? - PullRequest
0 голосов
/ 27 марта 2011

Как я могу найти разницу времени в секундах между двумя датами в прологе?

Дата и время (2001,03,04,23,00,32).

Дата и время (2001,03,04,23,01,33).

TimeDiff (D1, D2, п).

Sec = 61

Ответы [ 2 ]

1 голос
/ 29 марта 2011

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.
0 голосов
/ 27 марта 2011

Это немного неловко, так как месяцы не одинаковы по длине, а високосные годы имеют дополнительные дни.

Для начала я дам вам версию предиката, которая будет толькоучитывайте часы, минуты и секунды:

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 в обратном направлении, этот процесс был бы намного проще, поскольку он позволил бы вам использовать время операционной системыпроцедуры преобразования вместо написания своих собственных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...