是否有可移植的方法将本地系统时区转换为libical icaltimetype?
libical似乎只接受Olsen城市名称在其数据库中查找时区。 我所拥有的便携式是一个struct tm,它有一个GMT偏移和简写的3-4字母代码(EST / EDT等),但没有在libical中接受它的function。
我有一个非常糟糕的方式,我从libical扫描tz列表尝试匹配tznames,这可能会工作,但我很清楚这是一个坏主意。 但我还没有找到任何其他方法将本地时区变成libical icaltimetype。
我错过了一些简单的事吗?
便携式我的意思是Windows,osx和linux。
这是我正在写的ac程序。 但我现在看到tz偏移不是posix,所以不会这样做。
所以我认为答案是没有答案。 无论如何都没有便携。
所以我有linux和osx的单独构建路径,我还没有进入windows …
linux实现只是从/ etc / timezone读取(更多关于如何找到当前系统时区? )
而osx实现就是这样做的。
CFTimeZoneRef tzlocal = CFTimeZoneCopyDefault(); CFStringRef me = CFTimeZoneGetName(tzlocal); NSString *local = (__bridge NSString *)me; const char *tzname = [local cStringUsingEncoding:NSUTF8StringEncoding]; log.debug("Looking up timezone for %s", tzname); // this is a built-in timezone so we don't have to free it. local_timezone = icaltimezone_get_builtin_timezone(tzname);
不便携但至少它是正确的。