如何从 autoupdatingCurrentCalendar 获取时区进行更新?

问题描述 投票:0回答:1

这是这个问题的后续问题。

我有这个测试程序,用于调试更大的跨语言程序(Go/Obj-C)。

#include <Foundation/Foundation.h>

int main() {
    while (1) {
        const char *tz = [[[NSCalendar autoupdatingCurrentCalendar] timeZone] name] UTF8String];
        printf("%s\n", tz);
        sleep(1);
    }
}

来自文档

从此日历中获得的设置会随着用户设置的变化而变化(与 currentCalendar 对比)。

请注意,如果您根据日历或相关信息缓存值,这些缓存当然不会因日历对象的更新而自动更新。

我希望运行这个程序,然后在它运行时更改设置中的时区,将导致打印的时区标识符跟随更改。这种情况不会发生(在 shell 中运行单次迭代和循环确实按预期工作,因为程序可能在程序启动时获取环境)。我没有在这里缓存任何东西。

我需要做些什么才能使其遵循当前时区吗?

objective-c
1个回答
0
投票

我认为,如果没有运行循环,日历就不会更新。如果您只想获取当前时区,请使用CFTimeZone

CFTimeZoneResetSystem();
CFTimeZoneRef timeZone = CFTimeZoneCopySystem();
const char *tz = CFStringGetCStringPtr(CFTimeZoneGetName(timeZone), kCFStringEncodingUTF8);
© www.soinside.com 2019 - 2024. All rights reserved.