夏令时规则更改是不是使 C 运行时库无效?
Posted
技术标签:
【中文标题】夏令时规则更改是不是使 C 运行时库无效?【英文标题】:Has the daylight savings rule change invalidated the C runtime library?夏令时规则更改是否使 C 运行时库无效? 【发布时间】:2010-09-21 12:22:43 【问题描述】:前段时间,我整理了一个基于时间的库,可用于计算某人一年内的相对时间。我当时注意到,它在两个方向进行了一小时的轮班以实现夏令时。我突然想到Congress changed the daylight savings time rules。我不记得看到任何有关更新以解决算法更改的信息。有没有人有关于这个话题的任何信息?
【问题讨论】:
【参考方案1】:大多数类 Unix 系统使用 Olson tz 数据库获取时区信息:
http://www.twinsun.com/tz/tz-link.htm
对美国时区规则的更改在 tz 数据库的 2005l 版本中实现。
【讨论】:
【参考方案2】:对于 Visual Studio 2005 及更早版本,Microsoft 已发布 C 运行时库的更新版本。更多信息可以在here找到。
【讨论】:
【参考方案3】:你在哪个平台上工作?
由于国会没有为全世界制定规则:) 长期以来,Unix/Linux 上一直存在一种灵活指定规则的机制
例如,请参阅http://www.manpagez.com/man/8/zic/ 以了解文件的格式。您的特定系统可能需要新规则的更新定义(如果分发尚未处理它)
对于 Windows,MS 构建了一些规则并在情况发生变化时发布更新。
对于 MacO,我不知道,但我想它继承了 Unix 的做事方式。
但在所有这些情况下,都不需要更改 C 库
【讨论】:
【参考方案4】:一般来说,C 运行时确实使用内部数据文件从内部时间表示映射到用户的语言环境。这些映射由各自的供应商定期更新,以符合现行法规。
【讨论】:
【参考方案5】:由于内部时钟应设置为 UTC,因此夏令时只是更改时区的问题。例如,在我的语言环境中,10 月 26 日,我的 Mac 从 CEST(中欧夏令时间)切换到“正常”CET(中欧时间)。我的时钟显示改变了,但计算机的时间没有改变。
http://www.timeanddate.com/library/abbreviations/timezones/eu/cest.html
确实,这意味着您绝对必须将日期时间变量保留为 UTC 或考虑时区的本机格式。这就是为什么仅将日期时间记录为“YYYYMMDDHHMMSS”字符串是一个等待发生的错误。
【讨论】:
以上是关于夏令时规则更改是不是使 C 运行时库无效?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studios 2012 更改运行时库会导致链接错误,使用 C++
Visual Studio 2015:在没有运行时库的情况下编译 C/C++
如何在调试构建期间使 Visual Studio (2019/2022) 链接到正常的运行时库?