/usr/share/zoneinfo的位置在哪里指定?

我们正在为我们的Ubuntu应用程序添加时区支持。
我的机器上的时区信息位于`/usr/share/zoneinfo`目录下。
  1. 它总是在那个目录下吗?如果是的话,那是在哪里指定的
  2. 如果不是的话,是否有类似于“gettimeofday(2)”的系统调用可以用来找到它的位置?
提前感谢。
1个回答

搜索时区的位置是在C库中进行编码的(各种时区感知函数所在的地方):
$ strings -a /lib/x86_64-linux-gnu/libc.so.6 | grep zoneinfo
/usr/share/zoneinfo

该 C 库代码将此目录用作预处理器 #define 的一部分,因此没有常规方法可以查询其编译的值。

如果您需要自己解析时区数据(而不是使用少量可用的 C 库例程),那么硬编码 /usr/share/zoneinfo 应该是可以的:如果您的目标平台遵循Linux 文件系统层次结构,则应该是安全的。

如果您只对本地时区感兴趣,请阅读 /etc/localtime,它将是来自 /usr/share/zoneinfo 相关文件的副本。