c-是否有一种可移植的方法可以将本地系统时区转换为libicaltimetype



libical似乎只接受奥尔森城市名称来在其数据库中查找时区。我得到的是一个可移植的structtm,它有GMT偏移量和缩写的3-4个字母的代码(EST/EDT等),但在libical中没有接受这一点的函数。

我有一种非常糟糕的方法,我从libical扫描tz列表,试图匹配tzname,这可能会奏效,但我很清楚这是个坏主意。但我还没有找到任何其他方法将本地时区转换为性欲时间类型。

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

我所说的可移植是指windows、osx和linux。

这是我正在写的一个c程序。但我现在看到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);

不可移植,但至少它是正确的。

相关内容

  • 没有找到相关文章

最新更新