gpt4 book ai didi

java - 从 C# System.TimeZone 创建 java.util.Date

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:11 27 4
gpt4 key购买 nike

我有一个 Java 服务需要返回相对于用户当前时区 (C#) 格式化的日期/时间信息。例如,假设用户在西海岸(太平洋时间)晚上 8:00。他们连接到在中西部(中部时间)托管的服务,那里是晚上 10:00。如果用户向服务器询问当前时间,服务器应该为用户响应“8:00pm”。

我的想法是,客户端应用程序 (C#) 会将有关其当前时区或 UTC 偏移量的信息传递给服务。然后,Java 将使用该时区创建/格式化所有日期。

但是,我无法找到一种以 Java 可以创建和使用 java.util.TimeZone 对象的方式传递 C# System.TimeZone 信息的好方法.我可以从 C# 中获取 UTC 偏移量,但不能获取三位数时区代码。在 Java 中,我可以从三位数代码创建时区,但找不到从 UTC 偏移量创建时区的方法。从我在 Java 中看到的一切来看,TimeZones 是用代码(“PST”)或国家/地区(“America/Los_Angeles”)创建的,我不相信有一种明确的方法来获取这种格式的时区在 C# 中。

如何实现?

最佳答案

在 UTC 工作

正如评论所建议的那样,通常最好的方法是在 UTC 中处理您的业务逻辑。 .仅在用户期望时调整到本地时区以进行演示。

因此您的 Java 后端应该返回 UTC 日期时间值。通常最好的方法是将日期时间值序列化为标准 ISO 8601 中的字符串。格式。然后让客户端应用程序通过生成调整到特定时区的日期时间值的字符串表示来处理演示文稿。

参见 this Question关于日期时间工作的最佳实践。

但不知何故,这在本课题的上下文中是不可行的。因此,客户端应用需要向后端传达所需/预期的时区。

时区

避免使用 3-4 个字母的代码,例如 ESTIST。这些代码既不标准化也不唯一。此外,他们以一种令人困惑的方式调用夏令时。

改为使用 official time zone names .这些大多是英文的“continent”、斜杠和“region/city”的格式,例如America/MontrealAsia/Kolkata

.Net 不支持正确的时区命名

不幸的是,.Net 团队似乎不知道正确的时区命名。

System.TimeZone 类提供了 StandardName 等属性.但是 System.TimeZone 中的示例doc 显示“太平洋标准时间”而不是专有名称,例如“America/Los_Angeles”。

野田时间

我的第一个建议是考虑使用 Noda Time项目,.NET 的替代日期和时间 API。它的灵感来自非常成功的 Joda-Time Java 库,这反过来又启发了新的 java.time框架内置于 Java 8 及更高版本中。

看起来 Noda Time 支持正确的时区。不要使用 System.TimeZone,而是使用 Noda Time 来获取时区信息。

滚动你自己的映射

如果 Noda Time 不是一个选项,那么我可能会查看我的用户是否都在几个时区。如果是这样,我会制作自己的映射,例如 C# 返回的“太平洋夏令时”,时区的标准名称是正确的名称“America/Los_Angeles”。

关于java - 从 C# System.TimeZone 创建 java.util.Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034200/

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