2014-11-04 32 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