【发布时间】:2020-09-23 19:26:54
【问题描述】:
我们有一个嵌入式 Linux 系统,用户需要能够通过提供 POSIX 字符串(例如 WEuropeStandardTime-1DaylightTime,M3.5.0,M10.5.0/3)来永久设置系统的时区。
用户通过我们开发的 Web 服务与系统交互,因此我们可以完全控制实施。我正在寻找 C/C++ 解决方案。
我一直在查看 timedatectl -set-timezone,但它只接受 Olson 时区描述,而不接受 POSIX 时区字符串。我在想我可以解析 tzdata 以找到 POSIZ 时区字符串的匹配项,但在开始走这条路之前,我想知道是否有更好的方法,或者是否已经有一个库可以进行这种转换。
我对设置 TZ 环境变量不以为然,因为它是对 timedatectl 设置的系统日期和时间的覆盖,感觉就像一个障碍。另外,我不确定如何设置得足够早,以使从启动时运行的所有软件都能看到相同的时间。
【问题讨论】:
-
but it only accepts Olson timezone descriptions嗯,嗯,.. 不是timedatectl接受这一点,而是时区数据库是这样构造的。我说,不可能将任何 posix 规范转换为 zoneinfo 条目 - 但您可以将所有 zoneinfo 条目转换为 posix 规范并拥有一个映射。但是,实际上,只需将TZ设置为/etc/environment。如果不熟悉,请成为man tzfile localtime timedatectl。另一方面,您可以采用 posix 规范,生成一个 tzfile 并使用 timedatectl 进行设置。 -
您也可以在
DefaultEnvironment中设置TZ在/etc/systemd/system.conf- 假设systemd是您的系统管理员,它会启动所有设置TZ 的服务,所以它会在任何地方设置.
标签: c linux timezone tdatetime