2012-05-14 115 views
4

我有一些代碼用於將一些存儲爲字符串的時間戳轉換爲datetime對象,並且當它使用大於max int的int timestamp值轉換日期時發現了異常。將大於maxint的時間戳轉換爲日期時間對象

datetime.datetime.fromtimestamp(2147570047) 

例如給我

ValueError: timestamp out of range for platform time_t 

我怎樣才能解決這個問題呢?假設我想留在32位Python(運行2.7.2)

我注意到我可以將最大整數轉換爲日期時間對象,然後添加任何額外的timedeltas,但我想不出一個特別有效或者在實踐中這樣做的好方法。我可以將這些2038+時間戳轉換爲日期時間對象的一種好方法是什麼?

回答

7

覺得我的工作了,我是有點驚訝,這不會引發同樣的異常

>>> datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=2147570047) 
datetime.datetime(2038, 1, 20, 4, 14, 7) 

編輯:這不是一個完美的解決方案,似乎是有點問題,隨着時間的推移區(我目前在英國夏令時間(+1),因此或許可以解釋爲什麼下面這是一個小時的間隔)

>>> datetime.datetime.fromtimestamp(2047570047) 
datetime.datetime(2034, 11, 19, 17, 27, 27) 
>>> datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=2047570047) 
datetime.datetime(2034, 11, 19, 18, 27, 27) 
+3

原因'fromtimestamp'有困難(在某些系統上)是,它是基於系統的C功能。該文檔指出,這通常受限於1970年至2038年。另一方面,'timedelta'是爲Python定製的,處理持續時間高達略少於十億天。 –