2014-11-04 47 views
1

我試圖爲「GMT + 01」創建一個時區對象,但是,我一直無法找到一種方法來使用pytz。我嘗試使用該城市(http://wwp.greenwichmeantime.com/time-zone/gmt-plus-1/)說,在這個時區,但他們都給予看似怪異和不一致的結果(它們是相對於LMT)在pytz中創建新時區

>>> timezone('Africa/Algiers') 
<DstTzInfo 'Africa/Algiers' PMT+0:09:00 STD> 
>>> timezone('Africa/Brazzaville') 
<DstTzInfo 'Africa/Brazzaville' LMT+1:01:00 STD> 
>>> timezone('Africa/Conakry') 
<DstTzInfo 'Africa/Conakry' LMT-1 day, 23:05:00 STD> 
>>> timezone('Africa/Douala') 
<DstTzInfo 'Africa/Douala' LMT+0:39:00 STD> 

有誰知道的方法只是創建一個自定義時區與「GMT + 01」或甚至創建一個相對於時區(「GMT」)。我嘗試添加一個datetime.timedelta,但是(不出所料)沒有奏效。

回答

1

你可以做到這一點使用pytz通過選擇時區,然後再嘗試操作字符串和datetime的時間GMT功能的提取,那麼你就可以在你的情況下,只選擇GMT+x時間,這是​​

import pytz 

from datetime import tzinfo, timedelta, datetime 

GMT_1_Time_Zone = [] 
for tz in pytz.common_timezones: 
    now = datetime.now(pytz.timezone(tz)) 
    print now 
    if "+0100" in now.strftime("%z"): 
     GMT_1_Time_Zone.append((tz, "(GMT%s) %s" % (now.strftime("%z"), tz))) 


print GMT_1_Time_Zone 

輸出:

[( '非洲/阿爾及爾', '(GMT + 0100)非洲/阿爾及爾'),( '非洲/班吉', '(GMT + 0100)非洲/班吉'),( 'Africa/Brazzaville','(GMT + 0100)非洲/杜阿拉','(GMT + 0100)非洲/杜阿拉',('非洲/休達','(GMT + 0100)非洲/休達'), 非洲/拉各斯',(GMT + 0100) 非洲/拉各斯'),('非洲/利伯維爾','(格林威治標準時間+0100)非洲/金沙薩'非洲/馬拉博',(非洲/馬拉博), '(GMT + 0100)非洲/馬拉博'),('Africa/Ndjamena '('GMT + 0100) Africa/Ndjamena'),('Africa/Niamey','(GMT + 0100)Africa/Niamey'), ('Africa/Porto-Novo','(GMT + 0100) (非洲/突尼斯),(非洲/突尼斯), '(GMT + 0100)非洲/突尼斯'),(' Arctic/Longyearbyen','(GMT + 0100) Arctic/Longyearbyen'),('Eur (GMT + 0100) 歐洲/阿姆斯特丹'),('歐洲/安道爾','(GMT + 0100)歐洲/安道爾'), ('Europe/Belgrade','(GMT + 0100) )歐洲/貝爾格萊德'),('Europe/Berlin', '(GMT + 0100)Europe/Berlin'),('Europe/Bratislava','(GMT + 0100) Europe/Bratislava'), ('GMT + 0100) 歐洲/布魯塞爾'),('歐洲/布達佩斯','(GMT + 0100)歐洲/布達佩斯'), ('Europe/Busingen','(GMT + 0100) ('歐洲/直布羅陀','(GMT + 0100)歐洲/直布羅陀'), ('歐洲/哥本哈根','(GMT + 0100)歐洲/哥本哈根'), ('GMT + 0100)歐洲/盧布爾雅那','(歐洲/歐洲/馬耳他',('歐洲/馬耳他', '(GMT + 0100)Europe/Malta'),('Europe/Monaco','(GMT + 0100) Europe/Monaco'),奧斯陸','(GMT + 0100)Europe/Oslo'), ('Europe/Paris','(GMT + 0100)Europe/Paris'),('Europe/Podgorica', '(GMT + 0100)Europe ('Europe/Prague','(GMT + 0100) Europe/Prague'),('Europe/Rome','(GMT + 0100)Europe/Rome'), ('Europe/San_Marino '('GMT + 0100)Europe/San_Marino'), ('Europe/Sarajevo','(GMT + 0100)Europe/Sarajevo'),('Europe/Skopje', '(GMT + 0100)Europe /歐洲/斯德哥爾摩','(GMT + 0100) Europe/Stockholm'),('Europe/Tirane','(GMT + 0100)Europe/Tirane'), ('Europe/Vaduz' ,'(GMT + 0100)Europe/Vaduz'),('Europe/Vatican',(GMT + 0100)Europe/Vatican'),('Europe/Vienna','(GMT + 0100) Europe/Vienna'),('Europe/Warsaw','(GMT + 0100)Europe/Warsaw' ), ( '歐洲/薩格勒布', '(GMT + 0100)歐洲/薩格勒布'),( '歐洲/蘇黎世', '(GMT + 0100)歐洲/蘇黎世')]

UPDATE

挖掘出問題後。我發現了兩個更好的解決方案。

from dateutil import tz 
import datetime 
import pytz 

from datetime import datetime 
dt = datetime.strptime("2014-11-02 21:00:00", "%Y-%m-%d %H:%M:%S") 
dt = pytz.timezone('Etc/GMT+1').localize(dt) 
dt.isoformat() 
print dt 

使用parser

from dateutil.parser import parse 
dt = parse("2014-11-02 21:00:00" + "GMT+0100") 
dt.isoformat() 
print dt 
+0

這個貌似正確的答案。出於好奇,爲什麼在解析中添加了字符串?只是爲了更清楚一點嗎?似乎沒有它的工作。 – 2014-11-04 22:41:37