Windows中的所有时区都以如下方式显示
(GMT+10:00) Canberra, Melbourne, Sydney,
格林尼治标准时间和偏移和地点。反过来,Linux将每个时区作为/usr/share/zoneinfo/ every /Place中的目录映射。
我需要将每个Windows时区映射到我的应用程序的Linux时区。喜欢
(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi => Asia/Calcutta目前,位于俄罗斯和美国之间的国际日期线西的问题就出现了。在Windows中,它的标记为(GMT-12:00)国际日期线西,从各种来源我发现在Linux中,its /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 这让我感到困惑,我的应用程序与时间戳w.r.tUTC和UTC偏移量密切合作。所以这张地图让我和应用程序都很困惑。
有人能解释为什么在同一个地方-12和+12的偏移量反之亦然吗?
(预先谢谢:)
发布于 2011-02-14 11:56:35
Unicode.org将映射作为CLDR的一部分。您可以在这里获得最新版本。。还有从该页面链接的数据的XML版本。
您可以找到如何从XML数据这里生成映射的示例代码(在Python中)。
强制性时区咆哮:
请注意,在Windows中实现时区支持的人是在吸毒。我没跟你开玩笑。查看时区名称。为什么中欧时间被称为“浪漫标准时间”。浪漫?什么,因为它包括巴黎还是?罗马标准时间也包括罗马,但是罗曼斯!
此外,在注册表中,时区没有组织在它们的id下。不,他们是,疯狂地,组织在他们的展示名称!由于这是本地化的,这意味着每个时区将位于一个不同的键下,在不同的翻译Windows!因此,要找到正确的时区,您必须查看所有时区,以确定哪个时区具有正确的id。
我也有这方面的示例代码这里。请参阅get_win_timezone()函数。
我想知道是不是同一个人设计了这个决定,POSIX应该扭转时区上的标志,所以-8小时意味着加8小时。无论如何,我敢肯定他们一起抽的是非法的东西。
发布于 2011-02-11 15:31:27
如果所有的文件都有相反的标记,那么您正在查看的文件是前向映射偏移量,而您可能更熟悉的是反向映射偏移量。
Windows通常使用本地时区作为机器的内部时间,因此它需要可以转换回UTC的时区文件。Linux通常使用UTC作为机器的内部时间,因此它需要可以转换为本地时间的时区文件。
由于这两台机器的偏移量描述的是互补但却相反的时间方向,所以时区文件之间的关系是相反的。换句话说,如果您从一个区域文件中获取一组区域文件,则另一个区域文件集将为负值。
发布于 2011-02-11 12:44:27
Etc目录中的定义应该是POSIX样式,因此它们的符号与您预期的相反。我不是POSIX的专家,但据我所知,其基本思想是将时区的本地名称与GMT的偏移相结合来表达时区。中欧的一个例子(中欧时间/中欧时间):
Europe/Berlin (w/o daylight savings) equals GMT+01:00 equals CET-1实际上,GMT-1目录中的Etc描述了一个称为" GMT“的(虚构的)时区,这个时区比(实际)GMT早一个小时。
据我所知,这些文件只允许您针对它们创建(象征性的)链接,所以如果您位于中欧的某个地方,您将创建一个指向GMT-1的链接,并将其命名为CET-1。
我给您的最好建议是完全忽略Etc目录,使用一些从windows时区名称到unix时区文件夹/文件的映射表。Windows时区信息不仅给出了GMT的偏移量,而且还知道日光节约(以及何时开始或结束)。对于时区数据库中的文件夹/文件也是如此,但对于Etc目录中的文件则不是这样-它们给GMT提供了一个简单的静态偏移量。
可以在tz数据库中找到在维基百科中的时区列表。
https://stackoverflow.com/questions/4967903
复制相似问题