一尘不染

Linux- Windows时区映射?

linux

Windows中所有时区的显示方式如下

(GMT+10:00) Canberra, Melbourne, Sydney

格林尼治标准时间(GMT),偏移量和位置。反过来,Linux在/ usr / share / zoneinfo / [Continent] /
[Place]中将每个时区都用作目录映射。

我需要将每个Windows时区映射到我的应用程序的Linux时区。喜欢

(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi => Asia/Calcutta

现在,位于俄罗斯和美国之间的国际日期变更线西出现了问题。在Windows中,它以(GMT-12:00)International
Date Line West为标志,并且从各种来源中我发现在Linux中,它的Etc / GMT + 12。

(GMT-12:00) International Date Line West => Etc/GMT+12

(GMT+12:00) Coordinated Universal Time+12 => Etc/GMT-12
(GMT-02:00) Coordinated Universal Time-02 => Etc/GMT+2
(GMT-11:00) Coordinated Universal Time-11 => Etc/GMT+11

这让我感到困惑,并且我的应用程序与带有UTC的Timestamp和UTC偏移紧密配合。因此,这种映射使我和应用程序感到困惑。

谁能解释为什么同一位置的偏移量分别为-12和+12?

提前致谢 :)


阅读 351

收藏
2020-06-07

共1个答案

一尘不染

Unicode.org托管一个映射作为CLDR的一部分。
您可以在此处获取最新版本。从该页面链接的数据还有XML版本。

您可以在此处找到有关如何从XML数据生成映射的示例代码(在Python中)。

必选时区Rant:

请注意,在Windows中实施时区支持的人都是毒品。我不是在开玩笑。查看时区名称。为什么中欧时间被称为“浪漫标准时间”。浪漫吗?什么,因为它包括巴黎,还是?罗马标准时间可能说得通,它也包括罗马,但浪漫!!

另外,在注册表中,时区未按其ID进行组织。不,它们是按其 显示名称
疯狂组织的!由于已本地化,这意味着在Windows的不同翻译版本中,每个时区都将位于不同的键下!!!!因此,要找到正确的时区,您必须查看所有时区以查看哪个时区具有正确的ID。

在这里也有示例代码。参见get_win_timezone()功能。

我不知道这是谁设计的这一点,决定POSIX应该逆转时区的标志,让-8小时指的是同一个人, 加上 8小时。无论如何,我确定他们一起吸烟是非法的。

2020-06-07