Как сравнить две даты на выявление более поздней или более ранней?

Рейтинг: 2Ответов: 2Опубликовано: 08.01.2015

Всем привет и спрошедшими! Скажите, есть ли более вменяемый способ сравнения двух дат, нежели сравнение их в цикле: сначала годы, месяци, дни, часы и т.д.?

Ответы

▲ 2Принят

Вам нужно сравнивать голый результат.
Если он неоднозначный, то вам стоит выяснить, почему он такой. Вам может врать OS. Проверьте тип возвращаемого результата.

Любые преобразования к датам бессмысленны. Эти функции будут оперировать теми же данными, что и оператор больше-меньше. Это всего лиш количество секунд, прошедшее с 1970 года.

Единственное, если вам понадобится выполнять с датами какие-либо действия, сложнее сравнения, преобразуйте их в питоновский формат хранения даты и времени.

import datetime
datetime.datetime.fromtimestamp(st_mtime)

Его также можно сравнить простым < >.

▲ 3

Даты в Питоне можно сравнивать напрямую: now > then.

Но перед сравнением необходимо убедиться, что они представляют один и тот же тип. Питон 2 не ругается, если несовместимые типы используются, например: 1 < "a"; поэтому нужно самостоятельно следить к какому типу относятся переменные -- не следует сравнивать напрямую дату, выраженную как число с плавающей точкой (float) и дату, сохранённую в строке (str). В Питоне 3 это поправлено и подобные сравнения вызывают TypeError.

В частности, если t1 равен os.stat(path).st_mtime, то это так называемое "число секунд с эпохи" -- значение, возвращаемое time.time() функцией. Как правило, это число совпадает с POSIX временем -- "число секунд с Эпохи" (число SI секунд с 1970-01-01 00:00:00 UTC (Эпоха), исключая високосные секунды -- иначе говоря число UT1 секунд (секунды, измеряемые вращением Земли (средне-солнечное время)). UTC время поддерживается +/- 0.9 секунд от UT1 времени c помощью високосных секунд.

Если t1 > t2 это значит, что t1 находится в будущем по отношению к t2, если t2 также является "seconds since the epoch" значением.

12409383.43 слишком маленькое число для POSIX timestamp -- оно указывает на 1970 год.