2009-12-29 134 views
0

是否有可以處理千年的歷元時間轉換器?具有千年時間範圍的歷元時間戳轉換器,蟒蛇

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

拋出

ValueError: timestamp out of range for platform time_t 
+0

這將在使用64位庫的64位平臺上正常工作。它會失敗(如你所見)在32位平臺 – 2011-09-07 20:50:18

回答

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上,你應該能夠使用datetime module做日期的一些處理遠遠超出2038。該文件說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 2009-12-29 16:49:58

+0

@_jeremy,沒有什麼奇怪的,因爲datetime對象應該在所有平臺上支持它。這是'.timetuple()'調用,我期望在'time.gmtime()'調用失敗的任何地方都會失敗。 – 2009-12-29 18:26:11