只使用C标准库(普通的ISO C,没有POSIX,因此没有time_t在"自纪元以来的秒数"中表示的假设),使用time_t对应于01 Jan 1970 00:00:00 的最简单方法是什么UTC?
UTC部分是关键; 否则,只需使用mktime正确初始化struct tm就可以轻松解决问题.
或者(这实际上是问题的"点"),如何可移动地确定给定time_t值(例如通过当前时间time(0)和时期)之间的POSIX秒数?"POSIX秒"是指POSIX的"自大纪以来的秒"中使用的定义,它不使用闰秒.如果这听起来太复杂,只需回到第一段中最初陈述的问题,并假设时代可以代表time_t.
这里有一个方法的条目,如果没有人能打败它的话,“最简单”:
mktimeforstruct tm02 Jan 1970 00:00:00mktimefor 。struct tm 31 Dec 1969 00:00:00这可以合理地返回 -1,在这种情况下将其视为 0。time_t,当传递给 时gmtime,结果为01 Jan 1970 00:00:00假设本地时间与 UTC 的时差不超过 24 小时,我很确定这是事实。如有必要,我们可以扩大边界,在极端情况下,我们可以在0和之间进行搜索time(0)。
可以通过例如插值来改进二分搜索。但谁知道呢,也许一些疯狂的时区(或损坏的 tzinfo 数据)可能会导致 12 月/1 月的夏令时变化。我怀疑任何实时区都会发生这种情况。但 C 标准并没有禁止它,只是常识禁止它。
如果不是这样,我认为我们可以基于gmtime(mktime(01 Jan))(获取时区)和01 Jan 1970 00:00:00vs的比较01 Jan 1970 00:00:01(获取精度time_t)进行计算。
| 归档时间: |
|
| 查看次数: |
1231 次 |
| 最近记录: |