关于python:如何将半小时时区转换为pytz时区对象?

How can I convert a half-hour timezone to a pytz timezone object?

我试图用它的UTC-offset指定的时区读取时间并将它们存储为python datetimes。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

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


不要使用Etc/GMT±h POSIX时区。 它们仅出于历史原因(也许是海上船舶)存在。

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

如果给定一个具有相应日期的固定utc偏移量,那么您可以使用任何FixedOffset实现。

如果您想获得其他日期的正确时间,则必须将输入数据映射到正确的时区ID,例如'America/St_Johns'。 请参阅pytz:仅从GMT偏移返回Olson时区名称。


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

1
2
3
4
>>> 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的任意偏移量。