6

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

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

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

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

4

2 回答 2

6

你知道“时间”是独立于“时区”的,所以我不会强调这一点:)

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

Android“时区ID”对应标准,IANA“奥尔森数据库”:

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

于 2012-08-23T08:00:32.830 回答
5

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

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

于 2012-08-23T08:07:16.230 回答