13.6 怎样在日期上加N天?取得两个日期的时间间隔?

ANSI/ISO 标准C 函数mktime() 和difftime() 对这两个问题提供了一些有限的支持。

mktime() 接受没有规格化的日期, 所以可以用一个日期的struct tm 结构, 直接在tm mday 域进行加或减, 然后调用mktime() 对年、月、日域进行规格化, 同时也转换成了time t 值。

可以用mktime() 来计算两个日期的time t 值, 然后用difftime() 计算两个time t 值的秒数差分。

但是, 这些方法只有日期在time t 表达范围内才保证工作正常。

对于保守的time t, 通常范围是从1970 年到大约2037 年; 注意有些time t 的表达不是按照Unix 和Posix 标准的。

tm mday 域是个int, 所以日偏移量超出32,736 就会上溢。

还要注意, 在夏令时转换的时候, 一天并不是24 小时, 所以不要假设可以用86400 整除。

另一个解决的方法是用“Julian 日期”, 这可以支持更宽的时间范围。

处理Julian 日期的代码可以在以下地方找到: Snippets 收集(参见问题18.16);Simtel/Oakland 站点(文件JULCAL10.ZIP, 参见问题18.18) 和文献中提到的文章“Date conversions” [Burki]。

永不止步步 发表于01-17 15:01 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:345791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号