2016-03-23 17 views
5

() Staram:Znacznik czasu poza zasięgiem dla platformy localtime()/gmtime funkcji

ts = -216345600000 
datetime.datetime.fromtimestamp(ts/1000) 

ValueError: znacznik czasu poza zasięgiem dla platformy localtime()/gmtime funkcji()

I sprawdź wartość epochconverter: -216345600 jej zwrot GMT: sobota, 23 lutego 1963 00:00:00 GMT

Jak uzyskać poprawny wynik?

+0

co chcesz dostać ... mi kod nie daje błąd – Stefano

+0

related: [uzyskać najwyższy możliwy gmtime dla każdej architektury] (http://stackoverflow.com/q/32045725/4279) – jfs

Odpowiedz

5

W przypadku wielu wartości, takich jak zbyt daleko w przeszłości lub w przyszłości, podawanie znacznika czasu do numeru fromtimestamp() spowoduje złożenie skargi z błędem poza zakresem. Możesz jednak obliczyć datę, korzystając z numeru timedelta() względem epoki.

>>> from datetime import datetime, timedelta 
>>> date = datetime(1970, 1, 1) + timedelta(seconds=-216345600) 
>>> date 
datetime.datetime(1963, 2, 23, 0, 0) 
>>> date.strftime('%a, %d %b %Y %H:%M:%S GMT') 
'Sat, 23 Feb 1963 00:00:00 GMT' 

Jednak należy pamiętać, że nie można wykorzystać, aby cofnąć się do ery dinozaurów, ponieważ datetime() wciąż ma minimalna i maksymalna wartość może obsługiwać.

>>> datetime(1970, 1, 1) + timedelta(seconds=-62135596800) 
datetime.datetime(1, 1, 1, 0, 0) 
>>> datetime(1970, 1, 1) + timedelta(seconds=253402300799) 
datetime.datetime(9999, 12, 31, 23, 59, 59) 
>>> datetime(1970, 1, 1) + timedelta(seconds=253402300800) 

Traceback (most recent call last): 
    File "<pyshell#157>", line 1, in <module> 
    datetime(1970, 1, 1) + timedelta(seconds=253402300800) 
OverflowError: date value out of range 

timedelta() ma swoje granice, a także, ale z epoki jako punkt odniesienia, nie doszli nawet blisko ich osiągnięcia.

>>> timedelta(microseconds=1000000000*86400*10000-1) 
datetime.timedelta(9999999, 86399, 999999) 
Powiązane problemy