一文搞懂Linux时区设置、自定义时区文件

news2024/11/15 4:32:03

概念介绍

常说的 Linux 系统时钟有两个

  • 一个是硬件时钟(RTC),即BIOS时间,一般保存的是 GMT0 时间,没时区、夏令时的概念

  • 一个是当地时钟(LTC),即我们日常经常看到的时间,比如 date 命令获取的时间,一般是在 GMT 时间的基础上增加或者减去 0 ~ 12 小时

世界标准时间 (UTC)

Coordinated Universal Time,协调世界时,又称世界标准时间或世界协调时间,是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间

格林尼治标准时间 (GMT)

Greenwich MeanTime,格林尼治时间,又称格林尼治平均时间或格林尼治标准时间,旧译格林威治标准时间,GMT 是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。英国伦敦格林尼治定为 0° 经线开始的地方,地球每 15° 经度就被分为一个时区,共分为 24 个时区,相邻时区相差一小时;例:中国北京位于东八区,GMT 时间比北京时间慢 8 小时

补充:UTC 基本上等于 GMT,世界上所有国家的时间都是以此时间为基准

夏令时 (DST)

Daylight Saving Time,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为"夏令时间"

一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏令时的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时

我国也曾经实行过夏令时,在1986年开始实行,取得了相当大的成效,每年省电相当于3个三峡,但是在6年后的1991年,考虑到多方面的因素,最终选择了取消这一制度。夏令时在中国实行了6年便停止实行,其实停止实行的原因一言蔽之就是:中国太大了。中国和英法等国相比,有两点最大的不同:一是国土面积不同,二是气候不同

设置时间

设置系统时间

/etc/localtime 这个文件是用来设置系统的时区的,将 /usr/share/zoneinfo/ 中相应的时区文件拷贝覆盖 /etc/localtime,即可修改时区设置(也可以通过软连接实现),这种修改对 date 命令是及时生效的

不论是 date 还是 hwclock 都会用到这个文件,会根据这个文件的时区设置来进行 UTC 和本地时间的换算

设置完时区之后,可以通过 date 命令来设置系统时间

设置硬件时间

设置完系统时间后,硬件 RTC 时间并没有变更,如果发生重启,系统时间又会恢复到原来的值,所以这里需要将系统时钟同步到 RTC 硬件中

通过 hwclock 命令可以完成相关的设置

世界时区代表

先来看一下不带夏令时的时区文件代表

时区地区代表时区文件
GMT-12:00International Date Line West
国际日期变更线
Etc/GMT+12
GMT-11:00Midway Island, Samoa
萨摩亚时间
Etc/GMT+11
GMT-10:00Hawaii
夏威夷阿留申时间
Etc/GMT+10
GMT-09:30Marquesas
马克萨斯时间
Etc/GMT+9.30 **
GMT-09:00Alaska
阿拉斯加时间
Etc/GMT+9
GMT-08:00Pacific Time (US & Canada)
太平洋时间
Etc/GMT+8
GMT-07:00Arizona, Mountain America
北美山地时间
Etc/GMT+7
GMT-06:00Central America
北美中部时间
Etc/GMT+6
GMT-05:00Eastern Time (US & Canada)
北美东部时间
Etc/GMT+5
GMT-04:00Atlantic Time (Canada)
大西洋时间
Etc/GMT+4
GMT-03:30Newfoundland
纽芬兰时间
Etc/GMT+3.30 **
GMT-03:00Brasilia
巴西利亚时间
Etc/GMT+3
GMT-02:00Mid-Atlantic
大西洋中部时间
Etc/GMT+2
GMT-01:00Azores
亚速尔群岛时间
Etc/GMT+1
GMT+00:00Greenwich Mean Time :
Dublin, Edinburgh, Lisbon, London
格林尼治时间
Etc/GMT
Etc/GMT+0
Etc/GMT-0
Etc/GMT0
GMT+01:00Amsterdam, Berlin, Bern,
Rome, Stockholm, Vienna
欧洲中部时间
Etc/GMT-1
GMT+02:00Jerusalem
以色列时间
Etc/GMT-2
GMT+03:00Moscow, St. Petersburg, Volgograd
莫斯科时间
Etc/GMT-3
GMT+03:30Tehran
伊朗时间
Etc/GMT-3.30 **
GMT+04:00Abu Dhabi, Muscat
海湾时间
Etc/GMT-4
GMT+04:30Kabul
阿富汗时间
Etc/GMT-4.30 **
GMT+05:00Islamabad, Karachi, Tashkent
巴基斯坦时间
Etc/GMT-5
GMT+05:30Chennai, Kolkata, Mumbai, New Delhi
印度时间
Etc/GMT-5.30 **
GMT+05:45Kathmandu
尼泊尔时间
Etc/GMT-5.45 **
GMT+06:00Astana, Dhaka
孟加拉国时间
Etc/GMT-6
GMT+06:30Yangon (Rangoon)
缅甸时间
Etc/GMT-6.30 **
GMT+07:00Bangkok, Hanoi, Jakarta
印度支那时间
Etc/GMT-7
GMT+08:00Beijing, Chongqing, Hong Kong, Urumqi
中国时间
Etc/GMT-8
GMT+08:30Pyongyang
平壤时间
Etc/GMT-8.30 **
GMT+08:45Eucla
澳大利亚中部西部时间
Etc/GMT-8.45 **
GMT+09:00Osaka, Sapporo, Tokyo
日本时间
Etc/GMT-9
GMT+09:30Adelaide
澳大利亚中央时间
Etc/GMT-9.30 **
GMT+10:00Canberra, Melbourne, Sydney
澳大利亚东部时间
Etc/GMT-10
GMT+10:30Lord Howe Island
豪勋爵时间
Etc/GMT-10.30 **
GMT+11:00Magadan, Solomon Is., New Caledonia
所罗门群岛时间
Etc/GMT-11
GMT+12:00Fiji, Kamchatka, Marshall Is.
斐济时间
新西兰时间
Etc/GMT-12
GMT+12:45Chatham Is.
查塔姆岛标准时间
Etc/GMT-12.45 **
GMT+13:00Nuku’alofa
汤加时间
Etc/GMT-13
GMT+14:00Christmas Island
莱恩群岛时间
Etc/GMT-14

注意:

  • 带 ** 号的,表示默认不存在该时区文件,需自定义,详见后文的《自定义时区文件》章节
  • 表里说的时区文件,路径前缀都是 /usr/share/zoneinfo/

再来看一下带夏令时的时区文件代表

时区地区代表时区文件
GMT-12:00International Date Line West
国际日期变更线
N/A
GMT-11:00Midway Island, Samoa
萨摩亚时间
N/A
GMT-10:00Hawaii
夏威夷阿留申时间
America/Adak
GMT-09:30Marquesas
马克萨斯时间
N/A
GMT-09:00Alaska
阿拉斯加时间
America/Anchorage
GMT-08:00Pacific Time (US & Canada)
太平洋时间
America/Los_Angeles
GMT-07:00Arizona, Mountain America
北美山地时间
America/Denver
GMT-06:00Central America
北美中部时间
America/Chicago
GMT-05:00Eastern Time (US & Canada)
北美东部时间
America/New_York
GMT-04:00Atlantic Time (Canada)
大西洋时间
America/Halifax
GMT-03:30Newfoundland
纽芬兰时间
America/St_Johns
GMT-03:00Brasilia
巴西利亚时间
皮埃尔和密克隆群岛时间
America/Sao_Paulo
America/Miquelon
GMT-02:00Mid-Atlantic
大西洋中部时间
N/A
GMT-01:00Azores
亚速尔群岛时间
Atlantic/Azores
GMT+00:00Greenwich Mean Time :
Dublin, Edinburgh, Lisbon, London
格林尼治时间
Europe/London
GMT+01:00Amsterdam, Berlin, Bern,
Rome, Stockholm, Vienna
欧洲中部时间
Europe/Amsterdam
GMT+02:00Jerusalem
以色列时间
欧洲东部时间
Asia/Jerusalem
Europe/Kiev
GMT+03:00Moscow, St. Petersburg, Volgograd
莫斯科时间
N/A
GMT+03:30Tehran
伊朗时间
Asia/Tehran
GMT+04:00Abu Dhabi, Muscat
海湾时间
N/A
GMT+04:30Kabul
阿富汗时间
N/A
GMT+05:00Islamabad, Karachi, Tashkent
巴基斯坦时间
N/A
GMT+05:30Chennai, Kolkata, Mumbai, New Delhi
印度时间
N/A
GMT+05:45Kathmandu
尼泊尔时间
N/A
GMT+06:00Astana, Dhaka
孟加拉国时间
N/A
GMT+06:30Yangon (Rangoon)
缅甸时间
N/A
GMT+07:00Bangkok, Hanoi, Jakarta
印度支那时间
N/A
GMT+08:00Beijing, Chongqing, Hong Kong, Urumqi
中国时间
N/A
GMT+08:30Pyongyang
平壤时间
N/A
GMT+08:45Eucla
澳大利亚中部西部时间
N/A
GMT+09:00Osaka, Sapporo, Tokyo
日本时间
N/A
GMT+09:30Adelaide
澳大利亚中央时间
Australia/Adelaide
GMT+10:00Canberra, Melbourne, Sydney
澳大利亚东部时间
Australia/Melbourne
GMT+10:30Lord Howe Island
豪勋爵时间
Australia/Lord_Howe
GMT+11:00Magadan, Solomon Is., New Caledonia
所罗门群岛时间
N/A
GMT+12:00Fiji, Kamchatka, Marshall Is.
斐济时间
新西兰时间
Pacific/Auckland
GMT+12:45Chatham Is.
查塔姆岛标准时间
Pacific/Chatham
GMT+13:00Nuku’alofa
汤加时间
N/A
GMT+14:00Christmas Island
莱恩群岛时间
N/A

注意:

  • N/A,表示该地区没有夏令时
  • 表里说的时区文件,路径前缀都是 /usr/share/zoneinfo/

工具介绍

常用的工具

  • zdump,以文本展示某个时区变化历史的工具
  • zic,时区编译器,可将时区定义的文本文件编译成二进制时区文件
  • tzselect,设置时区的工具

这两个工具,在 Ubuntu 18.04 的机器上,默认就有

编译

去官网:https://www.iana.org/time-zones 下载最新的 timezone 压缩包

在这里插入图片描述

在 Ubuntu 18.04 的机器上,执行如下步骤开始编译

lzip -d tzdb-2022g.tar.lz
tar -xf tzdb-2022g.tar
mkdir out
cd tzdb-2022g/
# TOPDIR 指定目录安装,否则会安装到系统的 /usr/share/zoneinfo/ 目录下
make TOPDIR=$PWD/../out install

编译完成后的安装目录结构如下

在这里插入图片描述

zdump

cd ../out/usr/bin/
./zdump -v ../share/zoneinfo/America/Los_Angeles
# 报错说: No such file or directory
# 使用 strace 来跟踪看看哪里出了问题
strace ./zdump -v ../share/zoneinfo/America/Los_Angeles
# 发现是 zdump 默认会把 $TOPDIR/usr/share/zoneinfo/ 带进来
# 所以我们只需要带 America/Los_Angeles 就可以了
./zdump -v America/Los_Angeles
# 就可以看到夏令时相关的信息啦,strace 真有用

# 后来研读 zdump.c 的代码,发现绝对路径也可以,第一个字符要是'/'
./zdump -v /home/xxx/out/usr/share/zoneinfo/America/Los_Angeles

zic

# 回到 tzdb-2022g 目录,当前目录就有之前编译生成的 zdump/zic 工具
# 新建个目录,拿"北美"这个文本文件,编译一下生成二进制时区文件
mkdir my_tz_file
./zic -d ./my_tz_file/ northamerica
# 生成的二进制时区文件都在这个新建的文件夹里了
# 再用 zdump 试一下
./zdump -v /home/xxx/tzdb-2022g/my_tz_file/America/Los_Angeles
# 也是没问题的,但有一点疑惑
# 我们自己生成的 Los_Angeles 文件,文件大小跟系统的有出入
ls -lh ./my_tz_file/America/Los_Angeles
# 1.3K
ls -lh /usr/share/zoneinfo/America/Los_Angeles
# 2.8K

# 仔细看 zic 的说明文档才发现,如果要跟系统的文件一样大,需要加 -b fat 参数
./zic -b fat -d ./my_tz_file/ northamerica
# 据说这个可以兼容老版本

tzselect

这个工具还是挺好玩的,通过命令行交互,可以列出世界各大板块的各个国家的各个主要城市,还能看到该城市使用的是哪个时区文件
在这里插入图片描述

自定义时区文件

由于实际需求,Linux 系统自带的时区文件无法满足需要,上面介绍的世界时区是带夏令时规则的,如果我们不想考虑夏令时,可以使用 /usr/share/zoneinfo/Etc 目录下的时区文件,但是发现该目录缺少了一些非整数的时区文件

从上面介绍的世界时区代表可知,世界上存在着一些特殊的非整数时区,罗列如下

GMT-09:30
GMT-03:30
GMT+03:30
GMT+04:30
GMT+05:30
GMT+05:45
GMT+06:30
GMT+08:30
GMT+08:45
GMT+09:30
GMT+10:30
GMT+12:45

所以需要我们手动编辑 tzdb-2022g 目录下的 etcetera 文本文件,添加一段,如下红框部分

需要注意的是,文本文件最后需要一行空白行结尾

在这里插入图片描述

再用 zic 编辑器生成对应的时区文件,就可以拿去用啦

mkdir my_tz_file_etc
./zic -b fat -d ./my_tz_file_etc/ etcetera

参考

https://blog.csdn.net/weixin_42099906/article/details/116556736

https://blog.csdn.net/q793145253/article/details/127152917

https://www.modb.pro/db/575850

https://www.cnbiancheng.com/?p=1631

https://www.iana.org/time-zones

http://www.shijian.cc/shiqu/ - - 可以对照时间,验证设置的时区文件准不准

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/400640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elasticsearch 分布式搜索引擎2

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一…

手把手带你玩转Linux

今天这篇文章带你走进Linux世界的同时,带你手把手玩转Linux,加深对Linux系统的认识。 一、搞好Linux工作必须得不断折腾,说白了,只是动手力量必须强。我在初学Linux的那片,家中三台计算机,我在上边总是反反复复的进行着重装、网络ghost、双系统安装等的尝试。有很长一段时间里,…

CSS 之 background-clip 和 background-origin 属性

一、background-clip(背景的绘制区域) 1、纯色背景 该属性规定了背景的绘制区域,属性值有三种:border-box(覆盖到边框区域)、padding-box(覆盖到padding区域,不包含border&#xf…

数据库学习笔记(4)——SQL语言之DQL

复杂分组查询举例 子查询:把select查询结果当作数据使用时,这种结构就是子查询 子查询练习 -- 子查询练习:查询学生成绩在70分以上的学生学号和姓名 select stu_id as id, stu_name as 姓名 from tb_student where stu_id in (select cc_sid…

Forter 对支付服务商应对欺诈的四个建议和Gartner的两个关键结论

Gartner新版2023年度《线上欺诈检测市场指南》发布恰逢其时-企业正面临来自专业黑产和欺诈者与日俱增的压力。而在2023年,许多商户将调整反欺诈策略,对拒付率和转化率进行更严格的监测,以最大限度减少损失并增加营收。以下是Gartn…

工作记录:bi重构

2023.3.8,我在组内进行工作汇报。内容记录如下: 本次重构的特点 改动大影响后续开发 所以有必要进行工作汇报,让组内同事了解代码的改动与现状。 为什么要重构代码? 正在开发的数据报告模块包含大量 widget 功能,…

量子计算(8)pyqpanda编程3测量操作

作为一名高产博主,小编我一天不写文章就浑身难受,这不,一闲下来就来给大家科普量子计算编程操作了。 今天我们要来探讨“测量操作”,众所周知,薛定谔的猫是一种既死又活的状态,很多人认为,猫是死…

数据分析介绍,让你更了解数据分析

同学们好! 第一次接触互联网行业吗?没有关系,看完这篇介绍让你了解到底什么是数据分析?并对它强大的功能所吸引。希望你能耐心的看完,了解更多的行业信息! 1、是不是不知道什么是数据分析? 定…

14.卷积神经网络中的不变性

欢迎访问个人网络日志🌹🌹知行空间🌹🌹 文章目录1.问题介绍2.DCNN的Invariance3.后记参考资料1.问题介绍 最近看的2015年前后的几篇语义分割网络中反复提到了一个点,深度卷积神经网络的内置不变性。 2014年11月发表的Fully Conv…

线程池的线程是如何复用的

前言 进程和线程的关系相信大家都知道,这里我就不做过多的解释了,既然一个进程是由多个线程组成的,那么线程池又是由若干个线程队列组成的,在并发量比较高的情景下,我们通常会去创建线程池就执行任务,而不…

CentOS 8 桌面版右上角网络图标消失的解决办法及查看虚拟机ip地址没有ens项

抄录与小李行 我们在手动修改网络连接的配置文件后,桌面右上角的网络连接图标可能会消失。 正常显示的网络图标: 网络图标消失后的样子: CentOS 的网络连接由网络管理工具 NetworkManager 负责, 这个问题多半与其有关。 可能的…

BC双驱、ChatGPT大火,AI独角兽撬开盈利大门?

配图来自Canva可画 放眼AI行业,各大AI玩家长期亏损、“钱”景堪忧。 回看过去一年,部分AI独角兽的亏损问题愈发尖锐——云从科技2022年净亏损同比扩大至8.5亿元;寒武纪2022年净亏损11.6亿元,较上年同期扩大41.4%;地平…

ZooKeeper命令及JavaAPI操作

ZooKeeper数据模型 ZooKeeper是一个树形目录服务,其数据模型和Uiix的文件目录树很类似,拥有一个层次化结构。这里面的每一个节点都被称为:ZNode,每个节点上都会保存自己的数据和节点信息。节点可以拥有子节点,同时也允…

数据链路层及交换机工作原理

目录 一,帧格式 1.1 帧头类型字段的作用 1.2 MAC地址 1.3 MTU值 二,交换机工作原理 2.1 交换机的端口 2.2 端口状态 三,交换机基本工作模式及命令 3.1 交换机的工作模式: 3.2 命令 一,帧格式 其中类型是指&am…

Linux: 向内核提交补丁

文章目录1. 前言2. 提交内核补丁的步骤2.1 从代码仓库下载内核源码2.2 建立本地分支 linux-next_master2.3 制作一个补丁2.4 提交补丁2.4.1 配置发送邮箱2.4.2 配置 git send-email2.4.3 发送补丁1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读…

汽车制造商与IT公司之间的技术合作案例

如果您对最新汽车技术感兴趣的话,您可能经常听到汽车制造商和IT公司正在合作开发技术的消息。汽车生产商为何自身不进行技术开发,而是与IT企业合作呢?因为最近随着以IT技术为基础的电动汽车等环保汽车或无人驾驶汽车等的登场和发展,汽车制造商单独进行技术开发需要花费很多时间…

零死角玩转stm32初级篇6-中断

本篇博文目录:一.中断相关概念知识1.STM32 的中断和异常2.NVIC 中断控制器3.NVIC 结构体成员4.抢占优先级和响应优先级5.NVIC 的优先级组6.EXTI 外部中断7.中断服务函数二.按键点灯的二种实现方式1.按键和LED的原理图以及各种输入模式(浮空输入,上拉输入,下拉输入和模拟输入)2.…

到墨西哥的液体货物国际快递怎么邮寄

到墨西哥的液体货物国际快递怎么邮寄?有些时候邮递到墨西哥的物品,采用国际快递是一种很好的国际货物运输方式,但如果货品是液体的话,相对而言便会复杂一些。以下是方联货运物流分享的一些对于如何邮递液体货物国际快递的意见及注意事项&…

认识进程 -了解进程调度

前言 本篇通过介绍操作系统OS的重要功能,了解并发并行, 了解操作系统的一项重要功能 “进程管理” , 通过了解进程管理认识进程是操作系统资源分配的基本单位 ,如有错误,请在评论区指正,让我们一起交流,共同进步! 文章…

< Linux > 多线程(线程概念 + 线程控制)

目录 1、Linux线程概念 什么是线程 简单使用线程 二级页表 线程的优点 线程的缺点 线程异常 线程用途 2、Linux进程 VS 线程 进程和线程 进程的多个线程共享 进程和线程的关系 3、Linux线程控制 POSIX线程库 线程创建pthread_create 获取线程ID pthread_self 线程等待pthrea…