添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <time.h>
int main ( int argc , char ** argv ) {
struct tm tm ;
char buf [ 255 ] ;
strptime ( "2000-03-21 00:00:00" , "%Y-%m-%d %H:%M:%S" , &tm);
time_t timestamp = mktime ( &tm);
strftime ( buf , sizeof ( buf ) , "%Y-%m-%d %H:%M:%S" , &tm);
puts ( buf ) ;
return 0 ;
}

最后打印的时间与最初传入的时间可能并不一致。

追踪了半天,最后发现是tm.tm_isdst影响了结果的正确性。tm_isdst是用来描述是否是daylight saving time的属性,而strptime由于并不能确认是否是冬令时/夏令时,所以并没有置这个值,而是保留了其原有的默认值。而原有的默认值由于没有初始化,其值会影响mktime的行为,mktime会根据tm_isdst来修正tm中的各项值。

所以,在使用struct tm前,将其初始化成全0是最安全的。