我有一个由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 中的时区数量都不相同!
问问题
5078 次
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好得多。Date
Calendar
于 2012-08-23T08:07:16.230 回答