簡體   English   中英

Python時代-日期時間轉換錯誤?

[英]Python epoch - datetime conversion bug?

所以我有以下代碼:

import pytz
from datetime import datetime


tz = pytz.timezone('Asia/Singapore')

original_time = tz.localize(datetime.now())
original_epoch = original_time.timestamp()
converted_dt = tz.localize(datetime.utcfromtimestamp(original_epoch))
converted_epoch = converted_dt.timestamp()

print('{}\t\t{}'.format(original_time, original_epoch))
print('{}\t\t{}'.format(converted_dt, converted_epoch))

它吐出來了

# Original Time                         Original Epoch
2018-07-16 02:17:41.583510+08:00        1531678661.58351
2018-07-15 18:17:41.583510+08:00        1531649861.58351
# Converted Time                        Converted Epoch

這是Python的錯誤,還是我只是缺少一些東西? 無論哪種方式,我如何才能將日期時間轉換為紀元並自信地返回正確的時間呢?

tz.localize()不會對給定的datetime進行任何時區調整; 它只是將其tzinfo設置為給定的時區。 對於您使用的時間戳,這意味着tz.localtime()執行以下操作:

 datetime.now()                           ->  tz.localize(datetime.now())
 2018-07-16 02:17:41.583510                   2018-07-16 02:17:41.583510+08:00

 datetime.utcfromtimestamp(original_epoch) -> tz.localize(datetime.utcfromtimestamp(original_epoch))
 2018-07-15 18:17:41.583510                -> 2018-07-15 18:17:41.583510+08:00

請注意,時間不變。 只有時區偏移量。 因為tz.localize()的輸入是兩個不同的tz.localize()時間,所以您會得到兩個不同的感知時間。

從UNIX時間戳和時區構造datetime時間的正確方法是使用帶有兩個參數的datetime.fromtimestamp()

>>> print(datetime.fromtimestamp(1531678661.58351, pytz.timezone('Asia/Singapore')))
2018-07-16 02:17:41.583510+08:00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM