Как сравнить две даты на выявление более поздней или более ранней?
Всем привет и спрошедшими! Скажите, есть ли более вменяемый способ сравнения двух дат, нежели сравнение их в цикле: сначала годы, месяци, дни, часы и т.д.?
Всем привет и спрошедшими! Скажите, есть ли более вменяемый способ сравнения двух дат, нежели сравнение их в цикле: сначала годы, месяци, дни, часы и т.д.?
Вам нужно сравнивать голый результат.
Если он неоднозначный, то вам стоит выяснить, почему он такой. Вам может врать OS. Проверьте тип возвращаемого результата.
Любые преобразования к датам бессмысленны. Эти функции будут оперировать теми же данными, что и оператор больше-меньше. Это всего лиш количество секунд, прошедшее с 1970 года.
Единственное, если вам понадобится выполнять с датами какие-либо действия, сложнее сравнения, преобразуйте их в питоновский формат хранения даты и времени.
import datetime
datetime.datetime.fromtimestamp(st_mtime)
Его также можно сравнить простым < >
.
Даты в Питоне можно сравнивать напрямую: 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 год.