这个问题已经让我难过一分钟了。我正在开发一个用 C++ 编写的程序,我需要能够在两个不同的服务器之间发送以 ISO8601 编码的时间。这里的主要坚持者似乎是 Windows。
到目前为止,我已经strptime()
从 NetBSD 移植过来,以便轻松地从网络上读取日期/时间字符串并将其转换为tm*
. 但是,在正确地将其转换为本地化时,我完全被难tm*
住了,因此我可以使用strftime()
. 一种天真的方法是简单地取 和 之间的差异localtime(time(0))
,gmtime(time(0))
但这对于涉及夏令时的任意日期是不一致的。
到目前为止,我一直采用的方法是仅使用 POSIX 日期和时间函数,并在必要时编写 Windows 填充程序(strptime()
目前已完成,如果有必要,timegm()
可能在将来完成)。我宁愿继续这样做,但简单的事实是tm*
Windows 中的结构缺少 Linux 和 OSX 所做的一些字段,所以我可能别无选择,只能编写由#if WIN32
. 我也真的不希望为此增加动力。