0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

linux中的时区问题到底怎么处理

倩倩 作者:云平台运维开发 2019-09-28 02:56 次阅读

背景

这两天在打docker的时候,发现自己的容器启动之后,里面date -R的输出时区是UTC,总是和北京时间差了8个小时。

Docker中的时区问题处理

标准镜像

时区是UTC

查看/etc/localtime,发现默认指向的是Etc/UTC时区。而且TZ环境变量也没有被设置。

linux中的时区问题到底是怎么处理的

实际上,我们所有关于时区处理的问题都是glibc中处理时区的问题。 这个问题最权威的文档就是glibc的官方文档,里面关于TZ环境变量的描述介绍了时区问题的处理。

https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html#TZ-Variable

其中和我们相关的部分如下。

核心意思如下: 在glibc中,TZ环境变量的值是一个文件的名字,这个文件的内容描述了时区相关的信息

如果TZ这个环境变量没有设置,那么系统会选择一个默认值,在glibc中,其默认值为/etc/localtime. 如果TZ环境变量有值,并且这个值是以/开头的,那么是一个绝对路径的文件名,否则文件名为/usr/share/zoneinfo/$TZ. /usr/share/zoneinfo目录下面有世界各地的本地时间信息,比如Asia/Shanghai.一般这个目录下面的文件是被tzdata这个包安装的。

按照这个思路,我们强制指定TZ环境变量为Asia/Shanghai,时区正确

强制修改/etc/localtime文件,时区也正确。

docker容器处理时区的方法

根据上面的描述,在docker容器中设置时区其实有两个主要的方法。 一个是直接进行TZ环境变量设置,另一个是不设置TZ环境变量,直接修改/etc/localtime的内容(通过软链接或者文件直接复制都可以)

这里以设置TZ环境变量为例(我自己比较喜欢这样做,感觉比修改/etc/localtime更方便)。

首先,我们可以在Dockerfile里面添加ENV TZ=Asia/Shanghai,这样docker build出来的镜像默认TZ环境变量就是我们要的值了。

其次,我们也可以在容器拉起的时候使用-e TZ=Asia/Shanghai进行TZ环境变量设置,这个设置就是动态的,同一个镜像我们可以在拉起的时候设置不同的值。

总结

docker中的时区处理实际上就是glibc中的时区处理,了解了glibc中对事情的处理方法,核心是TZ环境变量和/etc/localtime文件,docker中的时期问题处理就简单了.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11204

    浏览量

    208697
收藏 人收藏

    评论

    相关推荐

    【Intel Edison试用体验】+edison时区设置

    4,要根据地理位置找到本地的时区,运行以下命令:timedatectl list-timezones | egrep -o "Asia/S.*" 5,要在Linux设置本地
    发表于 08-10 15:08

    Linux系统的正确时区调整方法

    如果你的 Linux 系统时区配置不正确,必需要手动调整到正确的当地时区。NTP 对时间的同步处理只计算当地时间与 UTC 时间的偏移量,因此配置一个 NTP 对时间进行同步并不能解决
    发表于 07-22 07:53

    Linux与Unix到底有什么不同

    Linux 与 Unix 到底有什么不同?
    发表于 05-08 14:36

    怎样去修改嵌入式Linux时区

    造成时间差8小时呢?考虑到是时区的问题,查询系统当前的时区设置 date -R,看到系统是 +0000 时区,而中国统一采用北京所在的东8时...
    发表于 11-02 09:05

    Linux系统时间分为哪几种

    Linux系统时间分为两种:系统时间和硬件时间。系统时间为Linux内核时间,硬件时间一般为BOIS的RTC时间。Linux内核在启动时,会尝试读取BIOS
    发表于 11-04 08:14

    怎样在嵌入式linux修改时区

    一个嵌入式linux项目,近日有客户使用电脑时间对其进行校时,结果发现时间比电脑时间晚8小时,这是因为电脑时间用的是本地时间,即东八区时间。解决方法,就是在嵌入式linux修改时区
    发表于 11-04 09:13

    嵌入式 linux对TZ时区是如何设置的

    date -R查看系统时区date -s “2020-10-23 09:38:00” 设置系统时间hwclock[-r|–show]//read[-s |–hctosys]//rtc ->
    发表于 11-04 07:24

    linux系统的时区有哪些

    关于时区的概念,其实初中地理课已经涉及,很多人都多少了解一些,可能只是细节搞不太清楚。为什么会将地球分为不同时区呢?因为地球总是自西向东自转,东边总比西边先看到太阳,东边的时间也总比西边的早。东边
    发表于 11-03 10:48 4507次阅读

    Java如何显示不同时区的时间(原理详解)

    当我们使用System.out.println来输出一个时间的时候,他会调用Date类的toString方法,而该方法会读取操作系统的默认时区来进行时间的转换。
    发表于 01-01 14:58 1.2w次阅读

    Linux内核到底是什么应该如何学习

    Linux可以说是近期非常火的了,有的人想学习linux内核,那他到底是什么呢?
    发表于 10-06 18:02 1881次阅读

    嵌入式Linux 硬件时间-系统时间-时区设置

    Linux系统时间分为两种:系统时间和硬件时间。系统时间为Linux内核时间,硬件时间一般为BOIS的RTC时间。Linux内核在启动时,会尝试读取BIOS
    发表于 11-01 16:58 11次下载
    嵌入式<b class='flag-5'>Linux</b> 硬件时间-系统时间-<b class='flag-5'>时区</b>设置

    嵌入式Linux时区的修改

    造成时间差8小时呢?考虑到是时区的问题,查询系统当前的时区设置 date -R,看到系统是 +0000 时区,而中国统一采用北京所在的东8时...
    发表于 11-01 17:07 8次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>时区</b>的修改

    嵌入式linux设置时区

    一个嵌入式linux项目,近日有客户使用电脑时间对其进行校时,结果发现时间比电脑时间晚8小时,这是因为电脑时间用的是本地时间,即东八区时间。解决方法,就是在嵌入式linux修改时区
    发表于 11-01 17:07 9次下载
    嵌入式<b class='flag-5'>linux</b><b class='flag-5'>中</b>设置<b class='flag-5'>时区</b>

    嵌入式 linux 对时 TZ时区设置

    date -R 查看系统时区date -s “2020-10-23 09:38:00” 设置系统时间hwclock [-r |–show] //read[-s |–hctosys
    发表于 11-01 17:37 7次下载
    嵌入式 <b class='flag-5'>linux</b> 对时 TZ<b class='flag-5'>时区</b>设置

    linux与window如何统一都显示为中国时区的时间

    同样的代码,linux上的时间 比window上的时间少8小时,如何统一都显示为中国时区的时间?
    的头像 发表于 08-19 17:58 1188次阅读
    <b class='flag-5'>linux</b>与window如何统一都显示为中国<b class='flag-5'>时区</b>的时间