【发布时间】:2015-06-17 14:38:01
【问题描述】:
我需要将时间从 UTC 转换为用户选择的时区。我还必须从该时区的用户输入转换为以 UTC 存储。
当前时区以 Olson 格式(“美国/洛杉矶”)定义。
在 Linux 上使用 timegm 解决方案很容易,但我找不到在 Windows 上执行完全相同操作的跨平台解决方案(或任何解决方案)。
我不能使用 Boost.Date_Time (http://www.boost.org/doc/libs/1_57_0/doc/html/date_time.html),因为它不支持历史时区更改,例如多年来不同的 DST 时段。显然有人在几年前提交了一个补丁,但它似乎没有被接受。
似乎可行的唯一其他解决方案是使用来自:https://www.iana.org/time-zones的数据和代码
有没有人试过这个,或者你有更好的主意?
【问题讨论】:
-
你考虑过ICU吗?它有相当好的时区支持。
-
我放弃了它,因为“ICU 不关心闰秒或历史行为”。但我会仔细看看。
-
这与 UTC/GMT 术语有关。那里确实有 IANA tzdata 的所有丰富性 - 与 Boost 不同。
-
看起来 ICU 可以工作了。我首先查看了 Boost,他们的实现应该基于 ICU,但没有这些功能。但 ICU 确实使用历史时区信息。创建一个答案,我可以选择它。谢谢!
-
在 StackOverflow 上通常不鼓励仅链接的答案。可能最好只是结束这个问题。