2017-10-15 86 views
0

我有一個日期時間作爲字符串(2016-12-31 23:59),我知道它是用UTC定義的。我現在想用Python獲取timedelta。我正在執行此操作的計算機通常位於CEST時區(Europe/Amsterdam),但這可能並非總是如此,因此我不想在代碼中對此時區進行硬編碼。如何獲取UTC中的日期時間和Python中的utcnow之間的差異

對於本地時區,這將極大的工作:

date_str = '2016-12-31 23:59' 
print datetime.now() - datetime.strptime(date_str, '%Y-%m-%d %H:%M') 

這顯然是不正確的,雖然,但將其更改爲使用utcnow()也是不正確:

print datetime.utcnow() - datetime.strptime(date_str, '%Y-%m-%d %H:%M') 

這不起作用正確,因爲現在由strptime產生的日期時間在這個代碼運行的機器的時區中,而utcnow()是UTC。

我發現this SO answer,但假設你知道代碼運行的機器的時區,我不知道。

有沒有一種方法可以將UTC時區添加到我從datetime.strptime()獲得的datetime對象,以便我可以將其與utcnow()進行比較?歡迎所有提示

回答

2

您的代碼實際上很好。你的錯誤在於這個假設:「由strptime產生的日期時間在這個代碼運行的機器的時區中。」

datetime.strptime(date_str, '%Y-%m-%d %H:%M')將產生一個幼稚 datetime表示您所說的UTC時間。

datetime.utcnow()將產生一個幼稚 datetime代表UTC中的當前時間。

所以差異將是準確的。

相關問題