0
while (utc_service_status.dwCurrentState == SERVICE_RUNNING){

    time(&secs);
    tptr1 = localtime( &secs );
    local_secs = mktime( tptr1 );
    tptr2 = gmtime( &secs );
    tptr2->tm_isdst = -1;
    gmt_secs = mktime( tptr2 );
    diff_secs = (local_secs - gmt_secs);
    *utc_bias = diff_secs/60;
}

这是示例代码。当此服务运行时正在更改时区。

4

1 回答 1

1

从技术上讲,这取决于您对本地时间的实现以及它如何选择进行时区转换。

Linux 上localtime(3)的手册页说:

时区调整按照 TZ 环境变量的指定执行(请参阅 tzset(3))。如果进程尚未调用 tzset(3),则函数 localtime() 使用 tzset(3) 来初始化时间转换信息。

它还在“BUGS”下添加了这个注释:

C 标准没有为程序提供修改其当前本地时区设置的机制,并且 POSIX 标准方法是不可重入的。(但是,在 POSIX 线程环境中提供了线程安全的实现。)

所以这似乎暗示“可能不会”。您可能会发现使用调用localtime的程序来测试自己很有用,然后更改TZ环境变量(和/或/etc/timezone符号链接)并再次调用localtime

于 2013-12-04T12:47:16.643 回答