自1970年以来,我在C应用程序中使用time(NULL)
函数来获取秒数。我注意到它返回的信息有1个小时的差异。
然后我尝试使用localtime
将结果转换为tm
结构,然后我注意到正在设置tm_isdst
字段。
代码如下:
time_t tempo;
struct tm sttime;
memset( &sttime, 0, sizeof( sttime ) );
tempo = time( NULL );
printf( "%dn", tempo );
sttime = *( localtime( &tempo ) );
sttime.tm_isdst = 0;
tempo = mktime( &sttime );
printf( "%dn", tempo );
在第一个printf
中,tempo
正以一小时的差进行打印。第二,它正在打印正确的值。
我在Ms DOS 6.0
操作系统中运行该应用程序,并使用Watcom v1.3
编译该应用程序。
Daylight Savings Time
信息来自哪里?DOS保存这些信息吗?
通过清除sttime.tm_isdst
,您告诉mktime
它比实际时间晚了一个小时(如果您处于夏令时,则似乎是因为您说设置了sttime.tm_isdst
)。