今天花了一点时间搞懂了 Linux 上设置时间 / 时区是怎么回事. 其实也是等到舍友回来后看了他的 Ubuntu 系统时间才突然突破了盲点. 而且巧了, Ubuntu 也能用 timedatectl, 那么让我们看下去.
总的来说, 要让 Linux 系统的 date 命令输出正确的 CST 时间, 只需要两步操作:
第一步, 更新 UTC 时间:
可以使用 ntpdate 命令: ntpdate -u ntp.API.bz
PS:ntp.API.bz 是一个 NTP 服务器, 可以获取 UTC 时间. aliyun 好像也有一个 NTP 服务器, 要用的话可以搜一下.
第二步, 设置你的系统时区:
CentOS 6 设时区:
我的 CentOS 6.7 上使用 tzselect, 是一个引导式的程序, 输入对应字符前面的数字即可, 中间大概会碰到 Asia,China,Beijing Time 等选项, 选中它们前面的字样即可
CentOS 7 设时区:
CentOS 7 有一个新的命令方便设置时区: timedatectl set-timezone Asia/Shanghai. 其他备用可选的时区还有 Asia/Chongqing(CST),Asia/Taipei(CST),Asia/Hong_Kong (HKT) 等.
如果不是设置中国的时区, 有另外一个命令可以查看 timedatectl list-timezones, 然后选择时区. 更多其他命令通过 timedatectl -h 查看.
设置时间 / 时区原理:
首先理解一下 GMT 和 UTC,ummm 最近风声紧, 这里引用百度搜到的一条答案: https://zhidao.baidu.com/question/153332934.html
理解了 GMT 和 UTC 了之后, 接下来你需要知道操作系统会存储两个时间元素, 一个是 UTC, 一个是 timezone.UTC 是标准时间, timezone 用来确定你是属于哪个时区的地区, 有了 UTC+timezone 就可以确定你所在的地区的时间, 基本规则就是 UTC 时间 + timezone 时间差, 时间差一般是 ±0.5h/1h...8h 等. 比如日本所在的时区就比我们中国早 1h(我们 8 点他们 9 点).
现在我们知道 Linux 设置时间 / 时区的原理了. 如果你参考了网上一些骚操作 (没错, 我就是中招了, 搞坏了 Shanghai 时区文件), 修改了 /etc/localtime 文件的内容, 那么相应的就会影响到 /usr/share/zoneinfo/Asia/ 目录下的时区文件, 这时候如果你用的是 CentOS 7, 那么补救方法很简单, 用 timedatectl 换一个时区就好了, 上面提供了三个可以替换的时区. 如果是 CentOS 6 , 可以参考以下命令, 效果是一样的:
ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
网上其他一些答案的骚操作:
搜到过修改 hwclock (硬件时钟) 的, 其实不怎么好用.
来源: http://www.bubuko.com/infodetail-3209266.html