时区
UTC:协调世界时,是基于原子钟的时间标准,被广泛用作全球事件时间的一致性参考。UTC不包含任何时区信息,因此它是一个“纯”时间标准。
CST:中国标准时,是东八区的标准时间,它是中国及其周边地区使用的标准时间。CST时间在UTC时间的基础上增加了8小时。
问题描述
ST平台
通过date
命令作为一个查看时间命令,非常方便,此时我们能够看到时区显示为CST时间。
但是在timedatectl
命令下,显示Time zone: n/a (UTC, +0000),即没有设置时区,此时应该默认采用协调世界时(UTC)才对,但是date
却显示使用的CST格式。
Linux中date时间格式
同样的,我们在Linux平台下运行相关命令,能够看到时间格式为CST,同时Time zone: Asia/Shanghai (CST, +0800),这是没有问题的,好的,那么我们需要追溯一下Time zone的相关设置。
- 通常情况下Linux时区的设置依赖于 /etc/localtimel 文件,能够看到他是一个链接文件,链接到一个用户目录下表示时区的文件。
- 我们去查看一下这个时区文件的内容,虽然
cat
二进制文件,输出乱码,但是通过hexdump
的方式查看,能够看出文件格式中又CST字样。 - 同理,我们用相同的方式去查看其他时区的文件内容,找一个美洲随便一个地区的时区为例,发现他的时区是MST
- 此时如果我们修改/etc/localtime链接文件,链接到该文件上,应该是能够看到
date
命令时区发生变化 - 故此,能够看出
date
时区与 /etc/localtime链接文件的指向有关
验证
ST平台
同样的去追溯时区文件,我们发现ST平台下的/etc/localtine文件不是一个链接文件,而是一个时区数据文件,查看文件内容发现采用的也是CST时区格式,故此能够知道为什么date
命令输出的时区格式是CST。
但是Time zone: n/a (UTC, +0000)显示未设置,应该为协调世界时,猜测应该是缺少Time zone文件的原因,尝试补齐文件路径试试。
果然,在我们补齐路径,并设置软连接后,使用timedatectl
命令,发现Time zone被补充了。
TI平台
TI平台中默认为UTC时间,发现他根本就没有 /etc/localtime 文件,直接使用的默认值,这也符合我们的推测:在没有设置时区时,就应该按照UTC时间显示。
小结
date
命令中的时区,与/etc/localtime链接文件所指向的时区数据文件有关,同时根据时区数据文件的路径来显示timedatectl
文件中的Time zone字段。在设置时区时建议采用链接的方式,并注明时区文件的地区,不然容易摸不着头脑。