考虑一下下面的程序,它除了每分钟打印一次时间之外,什么也不做。当我将/etc/localtime链接更改为不同的时区时,我希望它根据新的时区打印时间,但它仍然使用启动时生效的时区。
如何让程序使用正确的时间,即使在它运行时更改了时区?
顺便说一句,系统是CentOS 5.8
#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define MAX_STIME_LEN 32
int
main()
{
while(1){
struct timeval timev;
gettimeofday(&timev,0);
struct tm now_tm;
time_t now = timev.tv_sec;
char saved_time[MAX_STIME_LEN];
strftime(saved_time, sizeof(saved_time), "%b %e %T", localtime_r (&now, &now_tm));
printf("%s\n",saved_time);
sleep(15);
}
}请注意,使用localtime_r和strftime而不是使用ons stop调用是必要的。这只是一个例子。
发布于 2014-02-10 00:02:21
嗯,我在这里找到了答案: stackoverflow.com/questions/19170721/…,它所缺少的是我必须取消设置环境变量TZ (即使它只是指向/etc/localtime)
https://stackoverflow.com/questions/21661118
复制相似问题