libical 似乎只接受 Olsen 城市名称来在其数据库中查找时区。 我得到的是一个可移植的 struct tm ,它有一个 GMT 偏移量和 3-4 个字母的简写代码(EST/EDT 等),但 libical 中没有接受它的函数。
我有一个非常糟糕的方法,我从 libical 扫描 tz 列表,尝试匹配 tzname,这可能会起作用,但我很清楚这是一个坏主意。但我还没有找到任何其他方法将本地时区转换为 libicaltimetype。
我错过了一些简单的事情吗?
我所说的可移植是指 Windows、OSX 和 Linux。
这是我正在编写的一个c 程序。 但我现在发现 tz offset 不是 posix,所以这是不行的。
最佳答案
所以我认为答案是没有答案。无论如何,没有什么可携带的。
所以我有针对 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);
不可移植,但至少是正确的。
关于c - 是否有一种可移植的方法可以将本地系统时区转换为 libical timetype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948149/