Я написал функцию comp(time1, time2)
которая будет возвращать True
когда time1
меньше time2
. У меня есть сценарий, где time1
всегда должно быть меньше time2
. Мне нужно, чтобы time1
имело наименьшее возможное значение (т. time1
Представляло собой самый ранний возможный момент). Как я могу получить это время?
Какое самое старое время может быть представлено в Python?
Ответ 1
Если вы используете стандартные отметки времени unix timestamp, то самый ранний представляемый момент времени возвращается в 1970 году:
>>> import time
>>> time.gmtime(0)
(1970, 1, 1, 0, 0, 0, 3, 1, 0)
Ответ 2
Если вы используете модуль datetime, date, time, а datetime все имеют атрибут min
и max
.
>>> from datetime import date, time, datetime
>>> date.min
datetime.date(1, 1, 1)
>>> date.max
datetime.date(9999, 12, 31)
>>> time.min
datetime.time(0, 0)
>>> time.max
datetime.time(23, 59, 59, 999999)
>>> datetime.min
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
Ответ 3
В python объект datetime экспортирует следующие константы
datetime.MINYEAR
The smallest year number allowed in a date or datetime object. MINYEAR is 1.
datetime.MAXYEAR
The largest year number allowed in a date or datetime object. MAXYEAR is 9999.
Ответ 4
Некоторые функции в модуле datetime
подчиняются datetime.MINYEAR
и datetime.MAXYEAR
и вызывают ValueException
для дат вне этого диапазона. Они присвоены 1 и 9999 соответственно.
Модуль calender
значительной степени опирается на модуль datetime
, но в целом соблюдает "пролептический григорианский", который бесконечно распространяется в обоих направлениях.
модуль time
аналогичным образом не накладывает особых ограничений на элементы года в значениях кортежа времени и вычисляет время и даты, используя только секунды с начала эпохи.
При этом нельзя достоверно обрабатывать даты до 12 февраля 1582 года, когда был принят григорианский календарь. До этого дня даты вычислялись с использованием различных зависящих от местоположения каландров, для которых нет поддержки в стандартном Python.
Ответ 5
Если вы используете модуль time
, у вас нет гарантии, потому что он относится к функциям библиотеки C на платформе, которые могут обрабатывать разное минимальное и максимальное время. https://docs.python.org/3/library/time.html сообщает:
Большинство функций, определенных в этом модуле, вызывают библиотечные функции платформы C с тем же именем. Иногда может быть полезно ознакомиться с документацией платформы, потому что семантика этих функций варьируется в зависимости от платформы.
и https://docs.python.org/3/library/time.html#time.mktime сообщает:
Самая ранняя дата, для которой он может генерировать время, зависит от платформы.
Это потому, что эти функции принимают или возвращают значения time_t
и в соответствии со стандартом C11:
Диапазон и точность времени, представленного в
clock_t
иtime_t
определяются реализацией.
В отличие от модуля datetime
модуль time
не предоставляет никаких констант, указывающих минимальные и максимальные значения, которые он поддерживает, поэтому, если вам действительно нужно найти минимальное и максимальное значения для вашей платформы, вам нужно написать некоторый код, чтобы найти их экспериментально в время выполнения, например, с использованием экспоненциального поиска.