Какое самое старое время может быть представлено в Python? - PullRequest
29 голосов
/ 21 августа 2009

Я написал функцию comp(time1, time2), которая будет возвращать True, когда time1 меньше time2. У меня есть сценарий, где time1 всегда должно быть меньше time2. Мне нужно, чтобы time1 имел наименьшее возможное значение (т. Е. Представлял бы самый ранний возможный момент). Как я могу получить это время?

Ответы [ 5 ]

58 голосов
/ 12 августа 2015

При использовании модуля 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)
14 голосов
/ 21 августа 2009

В 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.

http://docs.python.org/library/datetime.html

4 голосов
/ 21 августа 2009

Некоторые функции в модуле datetime подчиняются datetime.MINYEAR и datetime.MAXYEAR и вызовут ValueException для дат вне этого диапазона. Они присвоены 1 и 9999 соответственно.

Модуль calender в значительной степени опирается на модуль datetime, но в целом соблюдает «пролептический григорианский» , который неограниченно простирается в обоих направлениях.

модуль time аналогичным образом не устанавливает особых ограничений для элементов года в значениях кортежей времени и вычисляет время и даты, используя только секунды с начала эпохи.


При этом вы не можете надежно обработать даты до 12 февраля 1582 г., когда был принят григорианский календарь. До этого дня даты вычислялись с использованием различных зависящих от местоположения каландров, для которых нет поддержки в стандартном Python.

4 голосов
/ 21 августа 2009

Если вы используете стандартные значения меток времени Unix для выпуска, то самый ранний представимый момент времени возвращается в 1970 году:

>>> import time
>>> time.gmtime(0)
(1970, 1, 1, 0, 0, 0, 3, 1, 0)
0 голосов
/ 06 апреля 2019

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

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