如何在 Ubuntu 18.04 服务器上设置时区
要在 Ubuntu 18.04 服务器上更改系统时区,首先使用 timedatectl list-timezones 检查名称,然后按 sudo timedatectl set-timezone Asia/Seoul 所示进行设置。tzselect 是一个查找时区名称的工具,单独运行它不会更改系统范围的设置。
时区与系统时间的区别
时区是用于将同一时刻显示为本地日期和时间的一种规则。例如,Asia/Seoul 是首尔的时区名称,领先协调世界时(UTC)9小时。更改时区通常会更改显示规则,但不会使时钟与互联网时间服务器同步。
如果您有基于服务器本地时间运行的计划任务或日志分析,请先检查更改的影响。一些程序使用自己的时区设置或环境变量,因此它们可能与系统设置显示不同。Ubuntu 18.04 的一般安全支持已结束,请在 Ubuntu 安全维护时间表 中检查适用范围,并计划迁移到受支持的版本。
检查当前时区
使用以下命令检查系统时间和时区设置。在进行更改之前记录 Time zone 中显示的名称,以便稍后可以恢复。
timedatectl status
date
date -u
timedatectl status 显示系统的本地时间、UTC 和时区。date 显示当前环境适用的本地时间,date -u 显示 UTC。如果在当前 shell 中设置了 TZ 环境变量,date 的输出可能与系统默认时区不同。
使用 timedatectl 更改系统时区
首先,检查可用的时区名称。该列表可能因已安装的时区数据而异。
timedatectl list-timezones | grep -F 'Asia/Seoul'
如果 Asia/Seoul 在列表中,请使用以下命令设置系统时区。需要管理员权限。如果您在其他地区,请将其替换为列表中找到的名称。
sudo timedatectl set-timezone Asia/Seoul
timedatectl status
如果命令成功,所选名称将出现在 Time zone 中。如果发生错误,请检查名称的大小写、可用列表以及管理员权限。如果系统未使用 systemd 或在容器中限制更改,则此命令可能无法使用。
要恢复到原始时区,请使用更改前记录的名称作为同一命令的参数。例如,仅当先前值为 Etc/UTC 时使用以下命令。
sudo timedatectl set-timezone Etc/UTC
timedatectl status
此命令用于更改 /etc/localtime 的时区设置。如果硬件实时时钟(RTC)设置为本地时间,它也可能影响 RTC。更多详情请参考 Ubuntu 18.04 timedatectl 手册。
使用 tzdata 和 tzselect
您还可以使用以下命令通过交互式菜单设置系统时区。在地区列表中选择 Asia,在城市列表中选择 Seoul。菜单中的数字可能会根据环境有所不同,请检查屏幕上显示的项目。
sudo dpkg-reconfigure tzdata
完成后,再使用 timedatectl status 检查系统时区。另一方面,tzselect 只会打印所选时区的名称,并不会更改整个系统的时区。你可以把选择地区和城市后得到的名称用于 timedatectl set-timezone。
tzselect
要在不同的时区执行特定命令,可以为该命令指定 TZ。以下示例仅适用于该单次执行的 date,并不会更改系统设置。
TZ=Asia/Seoul date
export TZ=Asia/Seoul 会影响当前 shell 及从该 shell 启动的程序,但不会更改系统范围的设置。你可以在当前 shell 中使用 unset TZ 取消设置此变量。更多详细信息,请参阅 Ubuntu tzselect 手册 。
屏幕设置和更改后的检查
如果安装了图形桌面,也可以在设置中选择时区,路径为日期与时间。如果启用了自动设置时区,手动选择可能会受到限制。菜单位置取决于桌面环境,典型的服务器安装可能没有图形界面。
更改后,检查timedatectl status并查看受影响服务的日志和计划任务。如果时区正确但实际时间不正确,则需要单独检查时间同步服务和网络连接。如果只有特定应用显示不同时间,也要检查该进程的TZ以及应用设置。




