如何从命令行更改时区设置

我有一个设置为PST的虚拟机,几位同事处于不同的时区。

如果我想将时区更改为ESTGMT,我需要做什么?


或者简单地执行echo UTC > /etc/timezone - SdSaati
10个回答

使用timedatectl
sudo timedatectl set-timezone <timeszone>

例子:

  • 时区设置为EST

      sudo timedatectl set-timezone EST
    
  • 时区设置为UTC

      sudo timedatectl set-timezone UTC
    
  • 列出所有有效的时区

      timedatectl list-timezones
    

这个命令非常适合用于自动化脚本,因为与基于dpkg-reconfigure tzdata的其他给定答案相比,它不需要任何用户交互。

1虽然我不喜欢+1评论,但是因为这个方法对我非常有效,所以我还是留下一个评论。我想要一个单行命令行工具来更改时区,而不是启动整个菜单或图形界面程序(我不知道tzdata是做什么的,它如何工作,但是使用这个单行命令就足够了)。谢谢! - Phil Ryan
运作得很顺利 ;) - user332660
有趣的是,它与tzdata做了一些不同的事情。在应用补丁后,我遇到了Java时间与系统时间不一致的问题。Tzdata无法解决这个问题,但这个方法可以。 - Daniel Bower
1这对我没有用;然而 dpkg-reconfigure 解决了问题。 - Antti Haapala
14.04.4 Ubuntu服务器 - Antti Haapala
不仅timedatectl没有报告任何内容或给出错误的状态,日期命令在shell中运行时时区仍然错误;通过dpkg-reconfigure tzdata切换到UTC是瞬时的 - 即使zsh提示符上的时间也跳到了另一个时区。 - Antti Haapala
@AnttiHaapala,谢谢分享 :) 我会查看的。你有没有考虑过[NTP / VM Hypervisor工具]是否对你的命令造成了竞争条件? - Jossef Harush Kadouri
我不这么认为。 - Antti Haapala
这是一个快速提醒,该命令适用于基于systemd的安装。如果您使用的是旧版本的系统,则可能需要依赖tzdata来进行操作。 - code_dredd
请注意,这个 timedatectl 的解决方案在重启后仍然有效。无需任何额外步骤来确保重启安全! - tanius
完美,我使用timedatectl set-timezone America/Maceio,它起作用。 - Offboard
你可能想要提到tzselect来找到所需的时区字符串。 - Martin Thoma

作为root用户,您需要执行以下命令:
dpkg-reconfigure tzdata

应启动一个基于菜单的工具,允许您更改时区。

这也适用于没有timedatectl的安装(例如在某些Docker容器中)。 - undefined

以下方法也适用。对于GMT:
ln -sf /usr/share/zoneinfo/GMT /etc/localtime

对于东部标准时间(EST):
ln -sf /usr/share/zoneinfo/EST /etc/localtime

10我认为最好链接其中一个城市文件,而不是GMT或EST,因为这样它们将跟踪夏令时,而链接(例如)GMT将不会更改系统时间以反映您所在城市的夏令时生效时间。例如:ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime - Asfand Qazi
1这是最好的。 - Hasan Tıngır
3我建议不要这样做。如果某些东西或某人意外地覆盖了/etc/localtime文件,你就会丢失zoneinfo文件。最好的做法是将zoneinfo文件复制到/etc/localtime文件上。 - J Roysdon
2在Docker镜像上,timedatectl可能不会默认安装,并且安装一个工具来改变时区真的过于复杂。这是唯一允许使用系统命令来设置时区的答案。从这个意义上来说,我会说这是最好的答案。 - cytsunny

最简单的方法,尤其对于服务器来说,是列出时区:
timedatectl list-timezones

选择您的,例如:

timedatectl set-timezone Europe/Athens

就是这样!:-)

编辑位于/etc文件夹下的timezone文件,内容如下:
Etc/GMT

你可以使用下一个格式:
Region "/" City 

示例/etc/timezone

Europe/Athens

或者

Europe/Paris
Europe/London

你可以尝试使用以下命令进行实验:dpkg-reconfigure tzdata,并检查时区文件。
你必须重新启动或重新开始一个服务(不是ntp服务)。我不知道是哪个服务。 如果有人知道,请与我们分享。 (在Ubuntu 15.10上测试,更改会立即生效)

要使用不同的时区设置运行一个程序,需要设置TZ环境变量,例如运行TZ=Pacific/Kiritimati date来查看圣诞岛上的时间,或者运行export TZ=Pacific/Kiritimati使设置在当前shell会话中持续生效。

cp -p /usr/share/zoneinfo/US/Pacific /etc/localtime

我建议不要像其他人提到的那样进行链接。如果某些脚本意外地覆盖了您的/etc/localtime文件,那么它将覆盖您的太平洋时区文件...而且替换它有点麻烦。
只需使用上述命令将太平洋文件复制到localtime文件即可。

这对我来说实际上起作用了。我觉得Docker和ansible可能有一些bug。无论是timedatectl还是dpkg-reconfigure tzdata都对我失败了。在我复制之后,时区从EST变成了PDT。 - Sun

我使用以下脚本询问用户要设置的时区,然后确认是否已经设置成功:
#!/bin/sh
sudo timedatectl set-timezone $(tzselect)
echo
echo timedatectl says:
timedatectl

我称它为 "tz-set"。

作为root用户,您需要执行以下命令: ln -fs /usr/share/zoneinfo/Europe/Warsaw /etc/localtime && dpkg-reconfigure --frontend noninteractive tzdata

请至少解释一下如何使用此命令来更改时区。 - Parto
我收到了“tzdata未安装”的错误提示。 - Nam G VU

这对我在GCP Ubuntu 14上通过SSH起作用

  1. sudo su
  2. cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
  3. 重新启动服务器
  4. 完成