在pytz创建新的时区(Create New Timezone in pytz)

2019-10-21 05:27发布

我试图创造“GMT + 01”时区对象,但是,我一直没能找到一种方法来做到这一点使用pytz。 我试图用(市http://wwp.greenwichmeantime.com/time-zone/gmt-plus-1/ )说,在这个时区,但他们都给予看似怪异和不一致的结果(它们是相对于LMT)

>>> 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,但(意料之中)没有工作。

Answer 1:

你可以做,使用pytz通过选择时区,然后再尝试操作字符串,并从提取datetime在GMT功能的时候,那么你只能选择时间GMT+x你的情况,这是GMT+1

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)非洲/班吉'),( '非洲/布',“(GMT + 0100)非洲/布 '),(' 非洲/休 ' '(GMT + 0100)非洲/休'),( '非洲/杜阿拉', '(GMT + 0100)非洲/杜阿拉'),(' 非洲/金沙萨 ' '(GMT + 0100)非洲/金沙萨'),( '非洲/拉各斯', '(GMT + 0100)非洲/拉各斯'),( '非洲/利伯维尔','(GMT + 0100)非洲/利伯维尔'),(' 非洲/罗安达 ' '(GMT + 0100)非洲/罗安达'),( '非洲/马拉博', '(GMT + 0100)非洲/马拉博'),( '非洲/恩贾梅纳','( GMT + 0100)非洲/恩贾梅纳 '),(' 非洲/尼亚美”, '(GMT + 0100)非洲/尼亚美'),( '非洲/波多诺伏', '(GMT + 0100)非洲/波多诺伏' ),( '非洲/的黎波里', '(GMT + 0100)非洲/的黎波里'),( '非洲/突尼斯', '(GMT + 0100)非洲/突尼斯'),( '北极/朗伊尔城',“(GMT +0100)北极/朗伊尔城 '),(' 欧洲/阿姆斯特丹 ' '(GMT + 0100)欧洲/阿姆斯特丹'),( '欧洲/安道尔', '(GMT + 0100)欧洲/安道尔'),(' 欧洲/贝尔格莱德 ' '(GMT + 0100)欧洲/贝尔格莱德'),( '欧洲/柏林',“(GMT + 0100)欧洲/柏林),(' E urope /布拉迪斯拉发 ' '(GMT + 0100)欧洲/布拉迪斯拉发'),( '欧洲/布鲁塞尔', '(GMT + 0100)欧洲/布鲁塞尔'),( '欧洲/布达佩斯','(GMT + 0100)欧洲/布达佩斯 '),(' 欧洲/布辛根”, '(GMT + 0100)欧洲/布辛根'),( '欧洲/哥本哈根', '(GMT + 0100)欧洲/哥本哈根'),( '欧洲/直布罗陀', '(GMT + 0100)欧洲/直布罗陀'),( '欧洲/卢布尔雅那', '(GMT + 0100)欧洲/卢布尔雅那'),( '欧洲/卢森堡', '(GMT + 0100)欧洲/卢森堡'), ( '欧洲/马德里', '(GMT + 0100)欧洲/马德里'),( '欧洲/马耳他', '(GMT + 0100)欧洲/马耳他'),( '欧洲/摩纳哥',“(GMT + 0100 )欧洲/摩纳哥 '),(' 欧洲/奥斯陆 ' '(GMT + 0100)欧洲/奥斯陆'),( '欧洲/巴黎', '(GMT + 0100)欧洲/巴黎'),(' 欧洲/波德戈里察”, '(GMT + 0100)欧洲/波德戈里察'),( '欧洲/布拉格', '(GMT + 0100)欧洲/布拉格'),( '欧洲/罗马',“(GMT + 0100)欧洲/罗马),( '欧洲/ San_Marino', '(GMT + 0100)欧洲/ San_Marino'),( '欧洲/萨拉热窝', '(GMT + 0100)欧洲/萨拉热窝'),( '欧洲/斯科普里',“(GMT +0100)欧洲/斯科普里 '),(' 欧洲/斯德哥尔摩 ' '(GMT + 0100)欧洲/斯德哥尔摩'),(' E urope /地拉那 ' '(GMT + 0100)欧洲/地拉那'),( '欧洲/瓦杜兹', '(GMT + 0100)欧洲/瓦杜兹'),( '欧洲/梵','(GMT + 0100)欧洲/梵 '),(' 欧洲/维也纳”, '(GMT + 0100)欧洲/维也纳'),( '欧洲/华沙', '(GMT + 0100)欧洲/华沙'),( '欧洲/萨格勒布', '(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


文章来源: Create New Timezone in pytz
标签: python pytz