2009-12-29 1 views
0

есть ли конвертер времени, который может иметь дело с тысячелетиями?эпоха timestamp конвертер с диапазоном тысячелетий, python

time.gmtime(1000 * 365 * 24 * 60 * 60) 

бросает

ValueError: timestamp out of range for platform time_t 
+0

Это будет прекрасно работать на 64-битной платформе с использованием 64-битных библиотек. Он потерпит неудачу (как вы нашли) на 32-битной платформе –

ответ

0

Да, по крайней мере, на ОС Windows (с использованием Windows 7 здесь). Какую платформу вы используете?

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 
>>> time.gmtime(1000*365*24*60*60) 
time.struct_time(tm_year=2969, tm_mon=5, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=123, tm_isdst=0) 

Кроме того, даже на Linux, вы должны быть в состоянии сделать некоторую обработку дат далеко за 2038 с помощью datetime module. Документы говорят MAXYEAR 9999 для этого модуля:

>>> dt = datetime.datetime.now().replace(year=1000+1971) 
>>> dt 
datetime.datetime(2971, 12, 29, 11, 43, 20, 727000) 
>>> dt.timetuple() 
time.struct_time(tm_year=2971, tm_mon=12, tm_mday=29, tm_hour=11, tm_min=41, tm_sec=16, tm_wday=6, tm_yday=363, tm_isdst=-1) 

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

+0

Я нахожусь на macosx. странно это действительно позволяет "datetime.datetime (2971, 12, 29, 11, 43, 20, 727000)" без ошибок. – jeremy

+0

@_jeremy, ничего странного в этом, так как объект datetime должен поддерживать его на всех платформах. Это вызов '.timetuple()', который я ожидаю, будет терпеть неудачу, когда вызов 'time.gmtime()' завершается с ошибкой. –