如何在 Linux 上更改时区
问题:我的Linux机器的当前时区不准确,我想更改系统的时区。如何更改 Linux 上的时区?
如果您的Linux系统的默认时区不正确,您需要更正它以获得准确的本地时间。请注意,配置 NTP 并不能解决时区错误的问题,因为 NTP 本身不处理时区。 NTP 以 UTC 格式处理时间数据,实际本地时间是通过添加本地时区偏移量来计算的。因此您需要自己单独更改时区。
检查当前时区
您可以通过以下方式轻松找到 Linux 系统的当前时区:
$ date
$ ls -l /etc/localtime
获取您所在时区的 TZ 值
更改 Linux 系统时区的第一步是获取您所在地区的时区值(TZ
值)。
为此,您可以使用 tzselect 命令,它允许您查看和选择已安装的时区文件。
$ tzselect
通过时区选择菜单来确定您所在的区域。

tzselect
将以 Posix TZ
格式显示您的时区(例如,America/New_York
)。这是您所在地区的 TZ
值。记下该值,然后继续下一步。

根据每个用户更改时区
如果您只想更改特定用户的时区,可以使用之前获得的 TZ
值定义 TZ
环境变量。在~/.bashrc
中添加如下内容。
export TZ='America/New_York'
然后重新登录或执行~/.bashrc
来激活更改。
$ source ~/.bashrc
更改系统范围内的时区
要更改 Linux 系统范围内所有用户的时区,请使用以下命令。
$ sudo rm -f /etc/localtime
$ sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
请注意,时区文件的路径 (/usr/share/zoneinfo/America/New_York
) 是根据您之前获得的 TZ
值构建的。
当像这样设置系统范围的时区时,您仍然可以通过在其主目录中的 ~/.bashrc
中定义 TZ
环境变量来为特定用户覆盖它。
在 systemd
下更改系统范围内的时区
如果您的 Linux 系统使用 systemd
(例如 Ubuntu 15.04+、Debian 8+、Fedora 15+、CentOS/RHEL 7+),还有另一种方法可以更改系统范围内的时区,即使用 timedatectl
命令。
在systemd
下,有一个名为systemd-timedated
的系统服务,其职责是调整系统时钟和时区。 timedatectl 命令配置此系统服务。
要使用 timedatectl
更改系统范围内的当前时区:
$ sudo timedatectl set-timezone 'America/New_York'
使用您在上面获得的 TZ
值。

如果您想在 PHP 中设置默认时区,请参阅本教程。