【问题标题】:Cross-platform timezone serialization跨平台时区序列化
【发布时间】:2014-03-24 02:09:17
【问题描述】:

我需要将时区连同其他数据一起保存到一个文件中,并从多个平台(Linux、WinRT、Windows Phone 8、OS X、Android、iOS)读取该文件。可能的语言是 C++、C#、Java 和 Objective-C。

将时区偏移量保存为双精度不足以满足我的需求,因为这会丢失夏令时信息,这很重要。根据日期和时区,凌晨 2 点 + 2 小时可能是凌晨 3 点、凌晨 4 点或凌晨 5 点。

是否有普遍支持的可序列化时区格式?

【问题讨论】:

  • 我不确定你是否需要不同于 ISO 8601 的东西。你需要存储时间,还是只关心时区偏移?
  • 两者都不是。时区有一个动态偏移量,在夏令时的情况下,它每年变化两次。这就是为什么 - 如果可行的话 - 我想保存时区,而不仅仅是静态时区偏移量。一种单一平台的方法是在 .NET 中使用 TimeZoneInfo 类。
  • 据我所知,时区没有动态偏移。但是国家/地区在时区之间切换以进行夏令时。例如,我国冬季使用 EET (UTC+2),夏季使用 EEST (UTC+3)。
  • 我指的是时区作为在这里实现的概念:userguide.icu-project.org/datetime/timezone 和这里msdn.microsoft.com/en-us/library/…

标签: serialization time timezone cross-platform iana


【解决方案1】:

似乎最好的答案是使用IANA/Olson/TZDB 时区(在基于 Unix 的系统上受支持),并将它们转换为基于 Windows 的平台。 2路转换似乎不可靠,因此最可行的选择似乎是将.NET中的默认日期时间框架替换为NodaTime,如多个相关问题中所述:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多