如何将我的时区更改为UTC/GMT?

目前,当我从bash执行日期命令时,会显示如下内容:

Thu May 17 12:21:00 IST 2012

以下是基于执行dpkg-reconfigure tzdata的时区配置:

  当前默认时区:'Europe/Dublin'
  本地时间现在是:Thu May 17 12:32:52 IST 2012。
  世界标准时间现在是:Thu May 17 11:32:52 UTC 2012。
  

有任何办法可以将时区从IST更改为UTC/GMT吗?

6个回答

有没有办法我从IST改成GMT?
要切换到UTC,只需执行sudo dpkg-reconfigure tzdata,滚动到大陆列表底部,选择EtcNone of the above;在第二个列表中,选择UTC。如果你更喜欢GMT而不是UTC,在那个列表中它就在UTC的上方。 :)

2是的!我希望这个功能默认就开启。 - wberry
1我按照你上面写的做了,改变了时区,但是我的服务器时间还是错误的,我需要重启系统吗?还是有其他办法? - user98095
10在Ubuntu 14.04.1中,Etc表示“以上都不是”。 - f01
2在Ubuntu的命令行中,以下链接提供了一个简单的一行命令:http://askubuntu.com/a/524362/182454 - Dan Nissenbaum
简洁!(KISS)喜欢它,谢谢!在最小的服务器安装中,其他时区不可用,只有UTC,因此安装sudo apt install tzdata是必须的! - EODCraft Staff
这改变了本地时间。但是世界标准时间没有改变。我的网站正在使用世界标准时间。 - Hikaru Shindo
你救了我的命。对于新的服务器开发者,点击键盘上的空格来选择。 - Yogi Arif Widodo

sudo timedatectl set-timezone UTC

将您的时区更改为UTC系统范围内。
您可以执行timedatectl list-timezones以查看所有可用的时区。

摘自@MattJohnson在SO上的回答

Etc/GMT+6这样的时区是有意为之,以与POSIX标准向后兼容。请参阅此文件中的注释。

您几乎永远不需要使用这些时区。相反,您应该使用完整命名的时区,如America/New_YorkEurope/London,或者适合您所在位置的时区。请参考此处的列表。


在旧的Un*x风格(SunOS,HPUX...)中,你可以这样做:
ln -fs /usr/share/zoneinfo/UTC /etc/localtime

检查 /usr/share/zoneinfo 的内容,以获取您想要/需要的时区。
例如,爱尔兰夏令时(IST)可以定义为:
-rw-r--r-- 1 root root 3661 Mar 13 22:18 /usr/share/zoneinfo/posix/Eire

或者

lrwxrwxrwx 1 root root 13 Mar 13 22:18 /usr/share/zoneinfo/Europe/Dublin -> ../posix/Eire

然而,最重要的是使用适当的时钟参考和ntp守护程序(例如openntpd),因为时区仅用于显示/转换时间为字符串,而不是存储时间(无论时区如何,在地球上与1970年1月1日的差异都是相同的)。

我可以使用这个命令将UTC时间转换为亚洲/加尔各答时间.. sudo rm /etc/localtime(因为我已经有了这个文件,所以无法使用下一个命令创建符号链接,所以我先删除了它),sudo ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime。我认为这似乎是一个通用的解决方案。 - Ajeeb.K.P

更新至14.04至今

查看时间和日期状态:

$ timedatectl status
                      Local time: Sun 2018-07-29 15:26:03 BST
                  Universal time: Sun 2018-07-29 14:26:03 UTC
                        RTC time: Sun 2018-07-29 14:26:03
                       Time zone: Europe/London (BST, +0100)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

查看时区列表: 列出的时区(425个)
$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
...
Pacific/Tongatapu
Pacific/Wake
Pacific/Wallis
UTC

设置时区为UTC:

$ timedatectl set-timezone UTC

查看时间和日期状态:

$ timedatectl status
                      Local time: Sun 2018-07-29 14:46:27 UTC
                  Universal time: Sun 2018-07-29 14:46:27 UTC
                        RTC time: Sun 2018-07-29 14:46:27
                       Time zone: UTC (UTC, +0000)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no*

嘿,你能帮我设置时区为UTC+06:00吗?谢谢。 - Md Alamin
我进行了一番搜索,但是set-timezone只允许你在可用的时区列表中设置时区,似乎无法应用修饰符或偏移量。也许还有其他方法可以实现设置UTC+06:00,但我找不到... 值得在论坛上提出一个新问题来询问。 - Broadsworde
嘿,我解决了,sudo timedatectl set-timezone Asia/Dhaka 顺便说一下,谢谢。 - Md Alamin
1我误解了你的要求...在可用的时区列表中有许多符合UTC+06:00的时区,我以为你在寻找一种应用非地理通用的UTC偏移的方法。很高兴你找到了你想要的。 - Broadsworde

这样的东西?

$ date
Wed Jul 16 22:52:47 EDT 2014

$ cat /etc/timezone
America/New_York

$ sudo dpkg-reconfigure tzdata
$ service cron stop && service cron start

如果你只需要一个单独的命令,比如 `ls`,请使用以下内容:
TZ=UTC ls -l --full-time