Linux 中的时区设置

Rah*_*obi 182 linux date time timezone

我通过将 zoneinfo 文件复制到/etc/localtime,将 Linux 机器上的时区设置为 GMT+6 ,但该date命令仍将时间显示为UTCtime-6. 任何人都可以向我解释这种行为吗?

我假设date命令应该显示UTCtime+6时间。以下是我正在执行的步骤:

date
Wed Jan 22 17:29:01 IST 2014

date -u
Wed Jan 22 11:59:01 UTC 2014

cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

date
Wed Jan 22 05:59:21 GMT+6 2014

date -u
Wed Jan 22 11:59:01 UTC 2014
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 311

看看这篇博客文章,标题是:如何:在 Linux 中更改时区的 2 种方法

红帽发行版

如果您使用的是 Red Hat 之类的发行版,那么您复制文件的方法通常是可以接受的。

注意:如果您正在寻找与发行版无关的解决方案,这也适用于 Debian,但如果您只需要关注 Debian 机器,下面有更简单的方法。

$ ls /usr/share/zoneinfo/
Africa/      CET          Etc/         Hongkong     Kwajalein    Pacific/     ROK          zone.tab
America/     Chile/       Europe/      HST          Libya        Poland       Singapore    Zulu
Antarctica/  CST6CDT      GB           Iceland      MET          Portugal     Turkey       
Arctic/      Cuba         GB-Eire      Indian/      Mexico/      posix/       UCT          
Asia/        EET          GMT          Iran         MST          posixrules   Universal    
Atlantic/    Egypt        GMT0         iso3166.tab  MST7MDT      PRC          US/          
Australia/   Eire         GMT-0        Israel       Navajo       PST8PDT      UTC          
Brazil/      EST          GMT+0        Jamaica      NZ           right/       WET          
Canada/      EST5EDT      Greenwich    Japan        NZ-CHAT      ROC          W-SU         
Run Code Online (Sandbox Code Playgroud)

但是,我建议链接到它而不是复制。

$ sudo unlink /etc/localtime 
$ sudo ln -s /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime
Run Code Online (Sandbox Code Playgroud)

现在日期显示不同的时区:

$ date -u
Thu Jan 23 05:40:31 UTC 2014

$ date 
Wed Jan 22 23:40:38 GMT+6 2014
Run Code Online (Sandbox Code Playgroud)

Ubuntu/Debian 发行版

要更改这些发行版中的任何一个的时区,您可以使用以下命令:

$ sudo dpkg-reconfigure tzdata
Run Code Online (Sandbox Code Playgroud)

    党卫军#1

$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Etc/GMT-6'
Local time is now:      Thu Jan 23 11:52:16 GMT-6 2014.
Universal Time is now:  Thu Jan 23 05:52:16 UTC 2014.
Run Code Online (Sandbox Code Playgroud)

现在,当我们检查它时:

$ date -u
Thu Jan 23 05:53:32 UTC 2014

$ date 
Thu Jan 23 11:53:33 GMT-6 2014
Run Code Online (Sandbox Code Playgroud)

注意:在 Ubuntu 14.04 及更高版本中也有这个选项,只需一个命令(来源:Ask Ubuntu - setting timezone from terminal):

$ sudo timedatectl set-timezone Etc/GMT-6
Run Code Online (Sandbox Code Playgroud)

关于“Etc/GMT+6”的使用

摘自@MattJohnson 对 SO 的回答

Etc/GMT+6为了与 POSIX 标准向后兼容,有意颠倒类似区域。请参阅此文件中的注释。

您几乎不需要使用这些区域。相反,您应该使用完全命名的时区,例如America/New_YorkEurope/London或任何适合您所在位置的时区。请参阅此处的列表。


小智 27

这就是我在 Ubuntu 中的做法。只需替换Asia/Tokyo为您自己的时区。

echo 'Asia/Tokyo' | sudo tee /etc/timezone

sudo dpkg-reconfigure -f noninteractive tzdata

有一个错误tzdata:某些价值得到归经dpkg-reconfigure

echo 'US/Central' >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Current default time zone: 'America/Chicago'

echo 'US/Eastern' >/etc/timezone
apt-get install --reinstall tzdata
# Current default time zone: 'America/New_York'
Run Code Online (Sandbox Code Playgroud)


SHW*_*SHW 17

tzselect命令可以执行您想要的操作。

  • 并将其压缩为一行,将 `TZ` 变量设置为本地时区 - 例如,对于 America/Los_Angeles - ``export TZ=`printf "2\n49\n21\n1\n" | tzselect 2>&1 | 尾巴-1```。你可以把这一行放在你的 .profile` 中,正如 `tzselect` 很有帮助的建议,如果你在提示符下运行它。 (2认同)