在 C 中,是否有一种简单的跨平台方法来检索给定时区开始和结束夏令时的日期?
我已经有了时区偏移信息以及当前是否正在观察夏令时,但我确实需要夏令时开始和结束的日期(对于我无法控制的外部依赖项)。在 Windows 中,我正在使用获取时区信息 to get 时区信息,但我找不到Linux/Solaris/Mac的类似功能。
我还应该指出,我不能仅仅依赖美国的夏令时采用规则,因为我无法预测它将在哪些国家/地区使用。
我知道获取此信息的唯一方法是通过zdump或者也许直接查看 /usr/share/lib/zoneinfo 文件本身,但我希望有更好的解决方案。
感谢您的任何帮助,您可以提供。
便携式和持续的处理这个问题的方法是建立全年 TZ 偏移表(当前时区当年的每一天)在应用程序启动时。将每天的午夜当地时间解析为 UTC (GMT),并记录相关日期相对于 UTC (GMT) 的有效时区偏移。寻找全年有效 TZ 偏移量的转变(转变将表明 DST 变化。)这种方法是一致且便携这仅取决于localtime
/gmtime
在相关平台上可靠运行,并将返回与以下内容完全一致的结果localtime
/gmtime
来电。不过,就变得有点如果您需要其他时区的 DST 信息,则更加复杂(比进程的默认时区。)
你也可以直接使用TZ/奥尔森数据库(代码可用于 *nix 和 Windows),对于最大的灵活性,但除非底层运行时/操作系统使用完全相同的时区信息(并且您的应用程序使用 TZ/Olson 时区信息and gmtime
/localtime
可以互换)然后你就会遇到不愉快的意外。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)