【问题标题】:How to convert a time zone information in C# to a time zone information in Java?如何将 C# 中的时区信息转换为 Java 中的时区信息?
【发布时间】:2012-08-18 16:48:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# java timezone


    【解决方案1】:

    你知道“时间”是独立于“时区”的,所以我就不再赘述了:)

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

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

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

    【讨论】:

    • PS:你可能会喜欢的有趣的 MSDN 链接:blogs.msdn.com/b/bclteam/archive/2010/10/11/…
    • 其实我指的是时间戳而不是时间。而且我需要时区信息,以便能够以设备的本地时间和 UTC 格式显示时间戳。所以时区信息对我来说真的很重要:D
    【解决方案2】:

    正如 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 要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多