我正在构建一个应用程序,用户可以为某些操作选择与实际时区不同的时区,而无需过多了解细节,我可以向您保证,支持多个时区实际上是有意义的某些利基业务。
我知道 IANA TZ 数据库,但我想知道是否有任何发行版提供了当前的列表,其中包含任何格式的时区和偏移信息,并为我节省了解析数据库的一些麻烦。
据我所知,时区数据库往往包含完整的历史信息,尽管我正在“现在”寻找当前有效/可用的信息。如果安装程序认为其中一些信息是多余的信息/未向用户显示,并且我非常想继承这些决定,那么继承安装程序的决定是很有用的。
由于我认为发行版的设置/安装程序已经显示/提供了此信息,因此我想知道在哪里可以获取该信息。
谢谢 :)
答案1
如果您的用户并非都是熟练的 Linux 管理员,他们可能会发现 tzselect 比其他选项更直观。它是一个 CLI 菜单驱动的系统,允许用户选择地区、国家、地区。第一个菜单如下所示:
root@scrspdimsolr01:~# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the timezone using the Posix TZ format.
#?
在几个选项之后,它会输出一个可用于设置个人时区变量的命令 - 输出可以被解析和使用,或者可以跟进并让用户将建议的响应剪切并粘贴到另一个提示中。浏览菜单后的结果如下所示:
You can make this change permanent for yourself by appending the line
TZ='America/Los_Angeles'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
America/Los_Angeles
由于最后一行要发送到 STDOUT,您可以设置它和/或将其传送到用户的 .profile(.profile 用于单独的 Linux 登录,或者您可以在该实例中为该用户设置实时时区)。
答案2
我猜想所有发行版都附带 IANA TZ 数据库,对于 Fedora 和 Debian,该软件包都被调用tzdata
,您将在/usr/share/zoneinfo
.但最简单的方法应该是使用一些提供这些已解析信息的库。这取决于您使用的语言或框架。例如,如果您使用的是 Python,则可以使用datetime
and zoneinfo
(区域信息3.9中添加的,你也可以使用皮茨它具有类似的 API,但不是 python 标准库的一部分)模块:
import datetime
import zoneinfo
zoneinfo.available_timezones() # simple list of all timezones
zoneinfo.ZoneInfo('US/Alaska').utcoffset(datetime.datetime.now()) # utc offset in datetime format
这实际上正是 Fedora 安装程序 Anaconda 所要做的做因为它是用 Python 编写的。