Возможно ли обратное путешествие через Python mktime с ошибкой «вне диапазона»? - PullRequest
4 голосов
/ 14 декабря 2011

Учитывая следующий код:

value = time.mktime(datetime.fromtimestamp(timestamp).timetuple())

Возможно ли для этого создать OverflowError 'аргумент mktime вне диапазона' и, если это так, какой диапазон временных меток может вызвать это?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Да. Я на два часа опережаю UTC и на Windows. Я получаю ошибку в последние два часа из диапазона int32:

>>> def roundtrip(x):
...     return time.mktime(datetime.datetime.fromtimestamp(x).timetuple())
...
>>> roundtrip(2**31-1-7200)
2147476447.0
>>> roundtrip(2**31-7200)
OverflowError: mktime argument out of range
>>> roundtrip(2**31-1)
OverflowError: mktime argument out of range
>>> roundtrip(2**31)
ValueError: timestamp out of range for platform time_t
1 голос
/ 30 декабря 2011

NB: как вы и просили, я думаю, что нет никакой возможной временной отметки, которая вызовет конкретное исключение, которое вы ищете, потому что datetime.fromtimestamp вместо этого поднимет ValueError, поскольку оно связано (вероятно) в тех же пределах.

Теперь диапазоны для mktime зависят от платформы, поэтому я не могу дать вам точный ответ. В моем 32-битном компьютере Linux границы находятся внутри 32-битного целого со знаком, поэтому кортеж, который преобразуется в значение меньше -2147483648 (т. Е. До (1901, 12, 13, 19, 44, 16)) или после 2147483647, или (2038, 1, 19, 3, 14, 7), вызовет это исключение ... но опять же, datetime.fromtimestamp поймает это раньше.

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