libical似乎只接受奥尔森城市名称在其数据库中查找时区。 我所拥有的便携式是一个struct tm,它有一个GMT偏移和简写的3-4字母代码(EST / EDT等),但没有在libical中接受它的功能。
我有一个非常糟糕的方式,我从libical扫描tz列表尝试匹配tznames,这可能会有效,但我很清楚这是一个坏主意。但我还没有找到任何其他方法将本地时区变成libical icaltimetype。
我错过了一些简单的东西吗?
便携式我的意思是windows,osx和linux。
这是我写的c程序。 但我现在看到tz偏移不是posix,所以不会这样做。
答案 0 :(得分:0)
所以我认为答案是没有答案。无论如何都没有便携。
所以我有linux和osx的单独构建路径,我还没有进入windows ..
linux实现只是从/ etc / timezone读取(更多关于How do I find the current system 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);
不便携但至少是正确的。