如何将半小时时区转换为pytz时区对象?

时间:2015-07-16 02:08:29

标签: python datetime python-3.x pytz

我正在尝试使用UTC-offset指定的时区读取时间并将它们存储为python日期时间。

pytz模块提供了可用的时区,我认为完整的列表在this question中给出。如果是这样,大多数时间都可以使用相应的Etc/时区存储并翻转符号:

Etc/GMT
Etc/GMT+0
Etc/GMT+1
Etc/GMT+10
Etc/GMT+11
Etc/GMT+12
Etc/GMT+2
Etc/GMT+3
Etc/GMT+4
Etc/GMT+5
Etc/GMT+6
Etc/GMT+7
Etc/GMT+8
Etc/GMT+9
Etc/GMT-0
Etc/GMT-1
Etc/GMT-10
Etc/GMT-11
Etc/GMT-12
Etc/GMT-13
Etc/GMT-14
Etc/GMT-2
Etc/GMT-3
Etc/GMT-4
Etc/GMT-5
Etc/GMT-6
Etc/GMT-7
Etc/GMT-8
Etc/GMT-9

然而,纽芬兰标准时间和阿富汗时间等一些时区与格林威治标准时间相差半小时(分别为-3:30和+4:30)。如何使用适当的时区存储这些时间,而无需手动将这些特定偏移映射到America/St_JohnsAsia/Kabul

2 个答案:

答案 0 :(得分:1)

oyu可以做些什么,虽然不是你想要的。

>>> nf_offset = pytz.FixedOffset(-150) # offset is in minutes, so 150=2.5 hours
>>> nf_tz = pytz.datetime("Canada/Newfoundland")
>>> datetime.now(nf_tz).strftime("%H:%M") == datetime.now(nf_offset).strftime("%H:%M")
True

它们是不同的对象,因此不确定在此之后您可以做什么,但是这将为您提供一个通用对象,您可以从中比较UTC的任意偏移量的时间。

答案 1 :(得分:1)

请勿使用Etc/GMT±h POSIX时区。 They are present only for historical reasons (and perhaps for ships in the sea)

通常,utc偏移量不足以指定时区,即同一时区在不同时间可能具有不同的 utc偏移量。反之,多个时区在某些时候可能具有相同的utc偏移量。

如果给你一个固定的utc偏移 相应的日期,那么你可以使用any FixedOffset implementation

如果您想获得其他日期的正确时间,则必须将输入数据映射到正确的时区ID,例如'America/St_Johns'。请参阅pytz: return Olson Timezone name from only a GMT Offset