是否有可移植的方法将本地系统时区转换为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); 

不便携但至少它是正确的。