2016-01-08 52 views
1

有了這個我現在掙扎了幾個小時。代碼比我在這裏提供的例子大得多,但它分解爲:錯誤的時區? 30分鐘,而不是1小時

我有一個天真的日期時間對象,我想將它轉換爲UTC時間,但那不起作用預期。

import datetime 
import pytz 

# Following is a naive datetime object, but we know the user meant 
# timezone Europe/Zurich 

zurich = datetime.datetime(2016, 1, 8, 7, 10) 
# datetime.datetime(2016, 1, 8, 7, 10) 

# So I'm now converting it to a datetime object which is aware of the 
# timezone 

zurich = zurich.replace(tzinfo=pytz.timezone('Europe/Zurich')) 
# datetime.datetime(2016, 1, 8, 7, 10, tzinfo=<DstTzInfo 'Europe/Zurich' BMT+0:30:00 STD>) 

# Let's convert to UTC 

zurich = zurich.astimezone(pytz.utc) 
# datetime.datetime(2016, 1, 8, 6, 40, tzinfo=<UTC>) 

與UTC時間相比,蘇黎世的偏移量爲+01:00(夏令時)或+02:00(夏令時)。爲什麼Python認爲它是+00:30?

任何幫助高度讚賞(我已經開始拔出我的頭髮了)。

+0

在這裏的文檔發現:HTTP://pytz.sourceforge .net /#example-usage](http://pytz.sourceforge.net/#example-usage) 不幸的是,對於許多時區,使用標準datetime構造函數的tzinfo參數''不適用於pytz。 – Daniel

+0

它不能工作,甚至語法也不夠,因爲如果一個時區大陸/城市處於DST時間或STD時間,則不能在沒有知識的情況下盲目更換時區。因此,必須調用pytz的智能函數來獲取時間和區域,應用當前的政府規則並將區域定製爲「CET + 1:00 STD」或「CEST + 2:00 DST」。標準的日期時間方法沒有回調到tzinfo來定製它,並且甚至必須在從DST到STD的點改變之前和之後一小時使用'is_dst' pameter,以便明確地轉換時間。 – hynekcer

回答

0

我發現了一個類似的問題this答案,如果我重寫代碼這種其他的方式,它似乎處理您的請求

import datetime 
import pytz 
zurich = pytz.timezone('Europe/Zurich').localize(datetime.datetime(2016,1,8,7,10), is_dst=None) 
zurich = zurich.astimezone(pytz.utc) 
# datetime.datetime(2016, 1, 8, 6, 10, tzinfo=<UTC>) 
相關問題