是否有可移植的方法将本地系统时区转换为libical icaltimetype?

时间:2016-04-29 22:04:28

标签: c timezone libical

libical似乎只接受奥尔森城市名称在其数据库中查找时区。 我所拥有的便携式是一个struct tm,它有一个GMT偏移和简写的3-4字母代码(EST / EDT等),但没有在libical中接受它的功能。

我有一个非常糟糕的方式,我从libical扫描tz列表尝试匹配tznames,这可能会有效,但我很清楚这是一个坏主意。但我还没有找到任何其他方法将本地时区变成libical icaltimetype。

我错过了一些简单的东西吗?

便携式我的意思是windows,osx和linux。

这是我写的c程序。 但我现在看到tz偏移不是posix,所以不会这样做。

1 个答案:

答案 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);

不便携但至少是正确的。