我的系统由 C#后端和 Java 前端组成。 C#后端与其他系统和某些移动设备进行通信。
在 C#方面,我的任务是识别来自移动设备的时间戳的时区并创建相应的TimeZoneInfo
对象。这没有任何问题。
在 Java 方面,我必须显示时区信息以及移动设备发送的数据。我使用TimeZone
类在我的域对象中存储时区信息。
现在的问题是如何创建一个与 C#的TimeZon
对象相对应的Java TimeZoneInfo
e对象? AFAIK时区没有任何唯一ID。此外,名称也不同(例如 C#:" Central Europe Standard Time
", Java " {{1 }}&#34)。甚至C#和Java中的时区数量都不相同!
答案 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中使用Date
和Calendar
要好得多。