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

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

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

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

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

你知道“时间”独立于“时区”,所以我不会那么be 🙂

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

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

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

  • 来自Olson时区的.NET TimeZoneInfo

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

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