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