前段时间,我整理了一个基于时间的库,该库可用于在一年内为某人计算相对时间。我当时注意到,它在两个方向上进行了一小时的夏令时转换。我突然想到国会改变了夏令时规则。我不记得看到任何有关更新的信息来解决算法的变化。有没有人有关于这个主题的任何信息?

有帮助吗?

解决方案

大多数类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会构建一些规则并在事情发生变化时发布更新。

对于MacOs,我不知道,但我认为它继承了Unix的做事方式。

但在所有这些情况下,不需要对C库进行任何更改

更一般地说,C运行时确实使用内部数据文件从内部时间表示映射到用户的语言环境。这些映射由相应的供应商定期更新,以符合现行法规。

由于内部时钟应设置为UTC,夏令时只是时区变化的问题。例如,在我的语言环境中,10月26日,我的Mac从CEST(欧洲中部夏令时)切换到'正常'CET(欧洲中部时间)。我的时钟显示改变了,但没有改变计算机的时间。

http://www.timeanddate.com/library/abbreviations /timezones/eu/cest.html

实际上,这意味着您必须将日期时间变量保留为UTC或以考虑时区的原生格式。这就是为什么只将日期时间记录为“YYYYMMDDHHMMSS”的原因。字符串,是一个等待发生的错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top