2

time(NULL)在 C 应用程序中使用该函数来获取自 1970 年以来的秒数。我注意到它返回的信息相差 1 小时。

然后我尝试使用 将结果转换为tm结构localtime,然后我注意到tm_isdst正在设置该字段。

代码是这样的:

time_t tempo;
struct tm sttime;

memset( &sttime, 0, sizeof( sttime ) );

tempo = time( NULL );  

printf( "%d\n", tempo );

sttime = *( localtime( &tempo ) );    
sttime.tm_isdst = 0;
tempo = mktime( &sttime );

printf( "%d\n", tempo );

首先printftempo以一小时的差异打印。第二,它正在打印正确的值。

我正在操作系统中运行该应用程序Ms DOS 6.0,并且该应用程序正在使用Watcom v1.3.

信息从何Daylight Savings Time而来?DOS 是否持有此信息?

4

1 回答 1

0

通过清除sttime.tm_isdst,您是在告诉mktime它比实际时间晚了一个小时(如果您在 DST 中,那么您似乎就是因为您说sttime.tm_isdst已设置)。

于 2012-08-29T20:12:32.737 回答