最近遇到一个跟服务器时区相干的问题,没准备充分,当问题真正来长期,有点懵。
特地是在生产环境中,零碎时区是特地重要的存在,很多利用在默认状况下,都是取的零碎时区,如果时区解决不得当的话,可能会造成不必要的困扰。
时区的概念
对于时区,有以下几个规范:
- CST:中国规范工夫(China Standard Time)
- UTC:协调世界时,又称世界规范工夫,简称 UTC,从英文国内工夫 / 法文协调工夫”Universal Time/Temps Cordonné”而来。中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、菲律宾、澳洲西部的工夫与 UTC 的时差均为 +8,也就是 UTC+8。
- GMT:格林尼治规范工夫(旧译格林威治均匀工夫或格林威治规范工夫;英语:Greenwich Mean Time,GMT)是指位于英国伦敦市区的皇家格林尼治天文台的规范工夫,因为本初子午线被定义在通过那里的经线。
Linux 的工夫分为两种:
- 硬件工夫:由 BIOS(或 CMOS)所负责。
- 零碎工夫:由 Linux 所负责,零碎工夫在零碎开关机后读取硬件工夫后,再由 Linux 治理工夫。
date
date 命令是显示或设置零碎工夫与日期。
这个是最简略、最直观获取零碎工夫与日期的形式了。
$ date
Thu Jul 30 13:23:50 CST 2020
显示所在时区:
date +"%Z %z"
CST +0800
date 命令常见参数:
%H 小时,24 小时制(00~23)%I 小时,12 小时制(01~12)%k 小时,24 小时制(0~23)%l 小时,12 小时制(1~12)%M 分钟(00~59)%p 显示出 AM 或 PM
%r 显示工夫,12 小时制(hh:mm:ss %p)%s 从 1970 年 1 月 1 日 00:00:00 到目前经验的秒数
%S 显示秒(00~59)%T 显示工夫,24 小时制(hh:mm:ss)%X 显示工夫的格局(%H:%M:%S)%Z 以字符串的模式显示时区,日期域(CST)%z 以数字的模式显示时区 (+0800)
%a 星期的简称(Sun~Sat)%A 星期的全称(Sunday~Saturday)%h,%b 月的简称(Jan~Dec)%B 月的全称(January~December)%c 日期和工夫(Tue Nov 20 14:12:58 2012)%d 一个月的第几天(01~31)%x,%D 日期(mm/dd/yy)%j 一年的第几天(001~366)%m 月份(01~12)%w 一个星期的第几天(0 代表星期天)%W 一年的第几个星期(00~53,星期一为第一天)%y 年的最初两个数字(1999 则是 99)
timedatectl
timedatectl 命令十分的不便,当你不带任何参数运行它时,这条命令能够像下图一样,输入零碎工夫概览,其中蕴含以后时区:
$ timedatectl
Local time: Thu 2020-07-30 05:30:21 UTC
Universal time: Thu 2020-07-30 05:30:21 UTC
RTC time: Thu 2020-07-30 05:30:21
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
只查看时区:
$ timedatectl | grep "Time zone"
/etc/timezone
应用 cat 命令显示文件 /etc/timezone
的内容,来查看时区:
$ cat /etc/timezone
Etc/UTC
抉择时区
$ tzselect
抉择实现之后,将时区相干的配置,写入 .profit
配置文件中。
而后应用 souce 命令,强制失效。
souce .profit
参考链接
- 在 Linux 中查看时区
- Linux date 命令