gpt4 book ai didi

java - Windows 和 Mac 上的时区

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:27 28 4
gpt4 key购买 nike

我想知道协调 Windows 和 OSx 之间时区的最简单方法是什么?我试过列出窗口可以支持的所有时区,并尝试交叉引用 OSx 可以支持的列表。我将获得时区的缩写(3 个字母),我需要相应地设置时区。有没有简单的方法可以做到这一点?

最佳答案

忘记使用 3 个字母的缩写 - 它们不是唯一的。例如,不起眼的“CST”可以是以下任何一种:

  • UTC-06:00 中部标准时间(北美)
  • UTC-05:00 古巴标准时间
  • UTC+08:00 中国标准时间
  • UTC+09:30 中部标准时间(澳大利亚)
  • UTC+10:30 中部夏令时(澳大利亚)

相反,使用标准 IANA time zone identifiers ,例如 America/Los_AngelesEurope/London

在 Windows 上,您需要将它们映射到适当的 Microsoft 时区 ID。例如,America/Los_Angeles == "Pacific Standard Time"。不要让这些名字欺骗了你。尽管标识符中有“标准”一词,但它涵盖了整个太平洋时区,包括 PST 和 PDT。

一般来说,您不能相信 Microsoft 标识符有任何特定的含义。例如,您应该使用“阿拉伯标准时间”、“阿拉伯标准时间”还是“阿拉伯标准时间”?这是三个不同的区域,具有不同的含义和相似的名称。还有很多其他示例。

无需猜测,在 Microsoft 和 IANA 区域之间进行转换的权威引用是 the Unicode CLDR .它包含(除其他外)经过充分研究的 translation matrix between the different time zones types .

请注意,IANA 时区比 Microsoft 时区多得多。还有一些没有 Microsoft 等效项的 IANA 区域。从 IANA 转换为 Microsoft,(通常)只有一个标识符选择。但是从另一个方向转换,从微软到 IANA,你可能有不止一种可能性。您可能需要使用其他信息(例如国家/地区代码)来确定适当的映射。

如果您在 .Net 中执行任何这些操作,您可以使用 Noda Time , 和代码 in this answer , 执行翻译。 Noda Time 中包含 CLDR 转换表。

如果您在 Java 中执行此操作,您可以简单地使用 IANA 标识符,因为 JRE 还包含 CLDR 转换表并将本地 Windows 时区映射到适当的 IANA 时区。

您还可以在其他项目中找到 CLDR,例如 ICU4C and ICU4J .

此外,您在评论中写道:

I need to actually set the timezone of the OS

您无法通过 Java 轻松地做到这一点。在 Windows 中,它需要调用多个 Win32 native functions ,并且您需要适当的权限。在其他操作系统中,我确信调用是完全不同的,但仍然会存在权限问题。

一般来说,允许任何单个应用程序更改操作系统的时区是一个危险的想法。想象一下,如果多个应用程序开始争夺对时区的控制权。时区会影响系统上的所有内容。这将是非常糟糕的。

关于java - Windows 和 Mac 上的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23820896/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com