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

标签 c timezone libical

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/

相关文章:

C 链接阶段不生成警告

php - php时区会一直存在吗?

python - 从朴素的本地日光时间转换为 Pandas 的朴素本地标准时间

iphone - iOS - libical/const char * - 内存使用

无法让 C 方法 icalrecur_expand_recurrence 工作

c - 当我比较 C 中完全相同的字符串时,strcmp() 返回 10

c - 如何在C中设置变量的最大和最小限制?

c - "expr1 ? expr 2 : expr 3"的解释?

c++ - 在 C/C++ 中使用 popen() 是一种糟糕的编码习惯吗?