2. 如果代码使用了当地时间进行逻辑调度,并且软件可能会运行在DST可能实行的环境中,那么一定要有相应的DST测试用例覆盖。因为这样的场景极有可能出现:软件测试在是在冬天,而客户是在夏天才开始使用软件的,一运行就发现如此刺眼的BUG,该多么扫兴啊。
======================================================================================================
Code:
#include "time.h"
#include "stdio.h"
#include <string.h>
int main(void)
{
const int nBufferlen = 64;
char szBufferA[nBufferlen] = {0};
char szBufferB[nBufferlen] = {0};
struct tm tmA;
struct tm tmA_reverse;
struct tm tmB;
struct tm tmB_reverse;
memset(&tmA, 0, sizeof(tmA));
memset(&tmA_reverse, 0, sizeof(tmA_reverse));
memset(&tmB, 0, sizeof(tmB));
memset(&tmB_reverse, 0, sizeof(tmB_reverse));
time_t ltA=0;
time_t ltB=0;
// 2013-03-27 22:30:00
tmA.tm_year = 113;
tmA.tm_mon = 2;
tmA.tm_mday = 27;
tmA.tm_hour = 22;
tmA.tm_min = 30;
tmA.tm_sec = 0;
// Your attention here
tmA.tm_isdst = 0;
tmB = tmA;
tmB.tm_isdst = -1;
ltA=mktime(&tmA);
ltB=mktime(&tmB);
localtime_r(<A, &tmA_reverse);
localtime_r(<B, &tmB_reverse);
strftime(szBufferA, nBufferlen, "%Y-%m-%d %H:%M:%S", &tmA);
strftime(szBufferB, nBufferlen, "%Y-%m-%d %H:%M:%S", &tmB);
printf("\nltA: %d tmA_reverse: %s", ltA, szBufferA);
printf("\nltB: %d tmB_reverse: %s\n\n", ltB, szBufferB);
return 0;
}
Output