我们一个项目中有如下代码:
time_t loc_time;
loc_time = time(NULL);
localtime_r(&loc_time,&ptr);
这段代码本意是获取本地时间,用于生成日志中的时间戳。
但是这个有个问题,当机器的时区变化后,生成的时间信息并不随着时区变化。
查了localtime_r的man手册,发现有下面一段话:
According to POSIX.1-2004, localtime() is required to behave as though tzset() was called, while localtime_r() does not have this requirement.
For portable code tzset() should be called before localtime_r().
翻译过来就是,调用localtime_r之前应该先调用tzset函数。
在以上代码localtime_r(&loc_time,&ptr);之前添加tzset()调用后,机器时区变化后,日志中的时间戳也随着时区变化。
附代码如下:
time_t loc_time;
loc_time = time(NULL);
tzset(); //it is important
localtime_r(&loc_time,&ptr);
感兴趣的小伙伴,可以写个简单的测试程序实验一下。