這是一個衆所周知Python 3.4 issue:
>>> from datetime import datetime
>>> local = datetime(2014, 1, 30, 23, 59, 40, 1999)
>>> datetime.fromtimestamp(local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1998)
注:微秒走了。該.timestamp()
已經返回結果略小於1999
微秒:
>>> from decimal import Decimal
>>> local.timestamp()
1391126380.001999
>>> Decimal(local.timestamp())
Decimal('1391126380.0019989013671875')
The rounding is fixed in the next 3.4, 3.5, 3.6 releases:
>>> from datetime import datetime
>>> local = datetime(2014, 1, 30, 23, 59, 40, 1999)
>>> datetime.fromtimestamp(local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1999)
要解決這個問題,你可以使用顯式公式:
>>> from datetime import datetime, timedelta
>>> local = datetime(2014, 1, 30, 23, 59, 40, 1999)
>>> datetime.utcfromtimestamp(local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1998) # UTC time
>>> datetime(1970, 1, 1) + timedelta(seconds=local.timestamp())
datetime.datetime(2014, 1, 30, 23, 59, 40, 1999) # UTC time
注意:所有示例中的輸入都是當地時間,但結果是最後一次UTC時間。
我想這是因爲浮點運算,如果打印,你會發現是'1391144380.001999'值。在將它轉換回來時,它失去了最後一點。如果它不太接近下一個十進制值,也不會發生同樣的情況:'(2014,1,30,23,59,40,1996)' – roymustang86