前段时间,我整理了一个基于时间的库,可用于计算某人一年内的相对时间。我当时注意到,它在两个方向都做了一小时的轮班,以实现夏令时。我突然想到国会改变了夏令时规则。我不记得看到任何有关更新以解决算法更改的信息。有没有人有关于这个话题的任何信息?
5 回答
大多数类 Unix 系统使用 Olson tz 数据库来获取其时区信息:
http://www.twinsun.com/tz/tz-link.htm
美国时区规则的更改在 tz 数据库的 2005l 版本中实现。
对于 Visual Studio 2005 及更早版本,Microsoft 已发布 C 运行时库的更新版本。更多信息可以在这里找到。
你在哪个平台上工作?
由于国会没有为全世界制定规则:) 长期以来一直有一种机制可以灵活地指定 Unix/Linux 上的规则
例如,请参阅http://www.manpagez.com/man/8/zic/了解文件格式。您的特定系统可能需要新规则的更新定义(如果分发尚未处理它)
对于 Windows,MS 构建了一些规则并在情况发生变化时发布更新。
对于 MacO,我不知道,但我想它继承了 Unix 的做事方式。
但在所有这些情况下,都不需要更改 C 库
更一般地说,C 运行时确实使用内部数据文件从内部时间表示映射到用户的语言环境。这些映射由各自的供应商定期更新,以符合当前的立法。
由于内部时钟应设置为 UTC,因此夏令时只是更改时区的问题。例如,在我的语言环境中,10 月 26 日,我的 Mac 从 CEST(中欧夏令时间)切换到“正常”CET(中欧时间)。我的时钟显示改变了,但电脑的时间没有改变。
http://www.timeanddate.com/library/abbreviations/timezones/eu/cest.html
实际上,这意味着您绝对必须将日期时间变量保留为 UTC 或考虑时区的本机格式。这就是为什么将日期时间记录为“YYYYMMDDHHMMSS”字符串是一个等待发生的错误。