如何将C#中的时区信息转换为Java中的时区信息?

时间:2012-08-23 07:52:28

标签: c# java timezone

我的系统由 C#后端和 Java 前端组成。 C#后端与其他系统和某些移动设备进行通信。

C#方面,我的任务是识别来自移动设备的时间戳的时区并创建相应的TimeZoneInfo对象。这没有任何问题。

Java 方面,我必须显示时区信息以及移动设备发送的数据。我使用TimeZone类在我的域对象中存储时区信息。

现在的问题是如何创建一个与 C#TimeZon对象相对应的Java TimeZoneInfo e对象? AFAIK时区没有任何唯一ID。此外,名称也不同(例如 C#:" Central Europe Standard Time", Java " {{1 }}&#34)。甚至C#和Java中的时区数量都不相同!

2 个答案:

答案 0 :(得分:6)

你知道“时间”与“时区”无关,所以我不会强调这一点:)

“TimeZone”实际上更像是操作系统的功能,而不是编程语言。

Android“时区ID”对应于标准的IANA“Olson数据库”:

等式的另一半是将.Net时区映射到“标准”。这个链接应该有所帮助:

答案 1 :(得分:5)

正如paulsm4所说,你可以将Windows名称映射到TZDB(又名Olson,又名tz,又名zoneinfo)名称 - 尽管映射会定期更改,你应该看看{ {3}}了解更多详情。您应该知道映射表的格式随着时间的推移而发生了变化,并且某些Windows ID映射到多个TZDB ID。 (有些人完全失踪了。)

作为替代方案,您可以考虑完全放弃Windows时区ID,并在整个堆栈中使用TZDB,如果您使用Unicode CLDR,我已经工作了一段时间的.NET日期/时间API 。如果您使用Noda Time,我将 更容易找到您的Java日期/时间工作,这是我基于Noda Time的“引擎”的库。它比在Java中使用DateCalendar要好得多。