获取C中平台的时区列表

时间:2011-10-25 20:57:38

标签: c windows linux ubuntu timezone

我正在用C开发一个程序,它需要返回计算机可以访问信息的所有可能区域的字符串数组(表面上来自tz数据库)。我需要在Linux(或至少是Ubuntu)和Windows之间建立这种跨平台,因此两个平台之间的任何常用方法都会让我的生活变得更加轻松。我知道有几种方法可以在Windows上完成(通过注册表,或者这里描述的方法http://msdn.microsoft.com/en-us/library/ms171251(v=sql.90).aspx),但除了硬编码数组之外,我还没有找到任何方法在Linux中执行此操作在Ubuntu中实现这一目标的最佳方法是什么,在Windows中有比上面提到的更好的方法吗?

3 个答案:

答案 0 :(得分:3)

Dave,zoneinfo目录的内容不仅在Linux发行版中是一致的,而且在许多(大多数)其他Unices中也是一致的。

在某些情况下可能的确切位置(我只知道一个:在Linux上,很多年前它曾经在/ usr / lib / zoneinfo下,当没有这样的时候作为/ usr / share的东西,所以它应该可以在你的应用程序中配置。但是你可以使用/ usr / share / zoneinfo作为默认值,它可以在99.9%的情况下使用。

答案 1 :(得分:0)

在Linux中,/usr/share/zoneinfo的内容是否足够?

答案 2 :(得分:0)

有一个C ++库(我知道你说C但你可以编写一个包装器...),称为ICU,它具有加载时区列表所需的所有功能。

http://icu-project.org/apiref/icu4c/classTimeZone.html

查找此函数以获取完整列表(如果您想以某种方式过滤列表,可以使用其他函数):

/**
 * Returns an enumeration over all recognized time zone IDs. (i.e.,
 * all strings that createTimeZone() accepts)
 *
 * @return an enumeration object, owned by the caller.
 * @stable ICU 2.4
 */
static StringEnumeration* U_EXPORT2 createEnumeration();