夏令时 DST 在Linux C/C++编程中的处理

本文介绍了在Linux环境下,C/C++编程中如何处理夏令时(DST)的问题。强调在使用当地时间进行逻辑调度的代码中,必须考虑DST的影响,并提供测试用例以确保在不同季节的正确运行。示例代码展示了如何使用`mktime`和`localtime_r`函数处理DST转换。
摘要由CSDN通过智能技术生成
上个礼拜,遇到一个问题:
给美国的客户做的软件,测试是在去年冬天,一切顺利。前段时间,测试人员突然报了一个BUG,说他们配置了一个时间参数,输入的值是2013-03-27 22:30:00,但是在运行过程中,软件显示确却是2013-03-27 23:30:00,整整快了一个小时。但是别的时间,比如2013-01-27 22:30:00,却没有问题。

当时想了想,立即觉得可能与夏令时有关系,于是赶把相关的函数调用单独拿出来测试了一下,果然如此。至于DST的概念,请大家自己去google吧。

这里的经验教训有如下两点:
1. 如果你的代码使用了mktime(struct tm * timeptr),并且你的代码可能会运行在DST可能实行的环境中,那么最好在你调用mktime之前将timeptr->tm_isdat设置为-1。
   0:   不考虑DST时间;
   1:   考虑DST时间;
  -1:  操作系统根据当前系统设置决定是否使用DST时间;
  

2. 如果代码使用了当地时间进行逻辑调度,并且软件可能会运行在DST可能实行的环境中,那么一定要有相应的DST测试用例覆盖。因为这样的场景极有可能出现:软件测试在是在冬天,而客户是在夏天才开始使用软件的,一运行就发现如此刺眼的BUG,该多么扫兴啊。


====================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值