这是这个问题的后续问题。
我有这个测试程序,用于调试更大的跨语言程序(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 中运行单次迭代和循环确实按预期工作,因为程序可能在程序启动时获取环境)。我没有在这里缓存任何东西。
我需要做些什么才能使其遵循当前时区吗?
我认为,如果没有运行循环,日历就不会更新。如果您只想获取当前时区,请使用CFTimeZone。
CFTimeZoneResetSystem();
CFTimeZoneRef timeZone = CFTimeZoneCopySystem();
const char *tz = CFStringGetCStringPtr(CFTimeZoneGetName(timeZone), kCFStringEncodingUTF8);