Linux 硬件时间(RTC time)、系统时间(UTC时间、Universal time)、本地时间(Local time)、时区(Time zone)与夏令时(DST)解析

这篇具有很好参考价值的文章主要介绍了Linux 硬件时间(RTC time)、系统时间(UTC时间、Universal time)、本地时间(Local time)、时区(Time zone)与夏令时(DST)解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

理解时间:硬件时间、系统时间(UTC时间)、本地时间、时区与夏令时

处理和管理时间是计算机科学的重要方面,但也是最复杂和容易混淆的方面之一。本文将详细介绍硬件时间、系统时间(UTC时间)、本地时间、时区和夏令时,希望能帮助读者更好地理解这些概念。

1. 硬件时间(RTC time)

1.1 硬件时间简介

硬件时间,也被称为实时时钟(RTC),是指计算机主板上的一个独立于操作系统的设备,它在电源关闭甚至断电情况下也能保持运行。其功能是记录当前的日期和时间。

1.2 如何使用硬件时间

大部分操作系统在启动时会从RTC读取时间,然后设置系统时间。同样,操作系统也可以将系统时间写回到RTC中。

在Unix和类Unix系统中,hwclock命令可以用来查询和设置RTC时间。例如:

# 查询硬件时间
hwclock --show

# 将系统时间设置为硬件时间
hwclock --systohc

# 将硬件时间设置为系统时间
hwclock --hctosys

在Windows系统中,可以通过日期和时间设置对话框或time命令查询和设置RTC时间。

2. 系统时间(UTC时间)(Universal time)

2.1 系统时间简介

系统时间是计算机内部使用的时间,它通常在启动时从RTC设置,然后由系统时钟进行跟踪。系统时钟是操作系统内核的一部分,可以以毫秒或纳秒级别提供精确时间。

2.2 UTC时间

系统时间通常使用协调世界时(UTC)表示。UTC是一种基于原子时钟的时间标准,全球各地的科学家通过精密测量来维护它。它与格林尼治标准时间(GMT)非常接近,但不受地球自转速度变化的影响。

在Unix和类Unix系统中,date命令可以用来查询和设置系统时间:

# 查询系统时间(UTC)
date -u

# 查询本地时间(由系统时间UTC和时区共同决定)
date

# 设置本地时间(后面那串是本地时间)(设置本地时间会同样设置系统时间,只不过会自动帮你做时区转换)
date -s "2022-01-01 00:00:00"

# 直接设置系统时间(不推荐,一般通过设置本地时间来设置系统时间,因为这样设置你还得把后面那串时间计算一下时区)
date -u -s "2022-01-01 00:00:00"

在Windows系统中,可以通过日期和时间设置对话框或time命令查询和设置系统时间。

3. 本地时间(Local time)

3.1 本地时间简介

本地时间是系统时间经过时区转换后的时间。时区是根据地理位置确定的,全球分为24个时区,每个时区大约代表15度的经度。例如,北京时间是UTC+8,而伦敦时间是UTC+0。

3.2 如何使用本地时间

在Unix和类Unix系统中,date命令默认显示的是本地时间:

# 查询本地时间
date

在Windows系统中,日期和时间设置对话框或time命令默认显示的也是本地时间。

4. 时区(Time zone)

4.1 时区简介

时区是为了方便统一时间而划分的地理区域。全球被划分为24个时区,每个时区大约代表15度的经度。各时区的时间以UTC(协调世界时)为基准,东边的时区比UTC时间晚,西边的时区比UTC时间早。

4.2 如何设置时区

在Unix和类Unix系统中,可以使用tzselect命令选择时区,然后将选定的时区链接到/etc/localtime

# 选择时区
tzselect

# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

在Windows系统中,可以通过日期和时间设置对话框更改时区。

4.3 docker容器中的时区(与宿主机日期时间同步)

Docker容器的默认时区取决于使用的基础镜像。许多常见的基础镜像(例如Debian,Ubuntu等)的默认时区通常是UTC(协调世界时)。这意味着如果没有在创建或运行Docker容器时显式设置一个特定的时区,那么容器内部的时间将按照UTC来显示。

如果希望docker容器中的时区与宿主机保持一致,可以在容器docker run的时候增加以下挂载:

-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro\
  • /etc/timezone: 这个文件包含了当前设置的时区信息。比如,如果系统设置为美国东部时区,这个文件的内容可能会是 America/New_York

  • /etc/localtime: 这个文件是当前设定的时区对应的数据文件的复制品或者软链接。这个文件用于提供本地化的日期和时间显示。

这两个文件在系统中扮演着不同的角色,而且都是影响系统时间表现的重要因素。如果希望让Docker容器的时间与宿主机完全一致,那么在运行容器时需要同时挂载这两个文件:

docker run -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro your_image

只挂载 /etc/timezone/etc/localtime 可能会导致一些问题,比如在处理跨时区的日期和时间时可能出现错误。

默认情况下,Docker容器并不会自动挂载 /etc/localtime 文件。容器是通过宿主机的内核获取物理时间的。

Docker容器虽然在很多方面都与宿主机隔离,但它们共享同一个内核。这意味着,当容器需要获取当前的物理时间(例如,调用 time() 系统调用)时,它会直接从宿主机的内核获取这个信息。这就是为什么即使不挂载 /etc/localtime,容器中的程序仍然能够获取到正确的物理时间。

然而,时区信息并不只是物理时间,它还涉及到逻辑时间的处理,包括日历计算、夏令时调整等等。这些信息是存储在 /etc/timezone/etc/localtime 这两个文件中的。如果希望容器中的程序能够正确地处理这些时区相关的问题,那么需要将这两个文件同时挂载到容器中,缺一不可。

5. 夏令时(Daylight Saving Time)(DST)

5.1 夏令时简介

夏令时是为了利用日照时间而在夏季调整时间的做法。通常情况下,夏令时会在春末将时间提前一小时,然后在秋初再把时间延后一小时。这样可以使人们在夜晚有更多的日光,从而节省电力。

5.2 夏令时地区

夏令时在全球范围内的采用情况并不统一,很多国家或地区都有自己特定的规定。

采用夏令时的地区
  1. 欧洲:大部分欧洲国家在每年3月的最后一个星期日开始夏令时,到10月的最后一个星期日结束。这包括英国、法国、德国、西班牙等国。

  2. 北美:包括美国(除了亚利桑那州和夏威夷)、加拿大(除了萨斯喀彻温省和一些地方)和墨西哥的一些地区。北美的夏令时从每年3月的第二个星期日开始,到11月的第一个星期日结束。

  3. 澳大利亚:只有南澳大利亚州、新南威尔士州、塔斯马尼亚州和维多利亚州实行夏令时,从每年10月的第一个星期日开始,到次年4月的第一个星期日结束。

不采用夏令时的地区:
  1. 中国:中国自1991年起就未再实行夏令时。

  2. 日本:日本自1952年以来就没有实行夏令时。

  3. 印度:印度没有实行夏令时。

  4. 亚利桑那州和夏威夷:这两个美国的地区不采用夏令时。

  5. 大部分非洲和南美洲国家:除了一些特定的国家或地区,大部分非洲和南美洲的国家都不实行夏令时。

5.3 如何处理夏令时

大多数现代操作系统和编程语言的时间库都可以自动处理夏令时。例如,在Python中,pytz库提供了世界各地的时区数据,并可以自动处理夏令时:

from datetime import datetime
import pytz

# 获取当前的UTC时间
now = datetime.now(pytz.utc)

# 转换为纽约时间(自动处理夏令时)
ny_time = now.astimezone(pytz.timezone('America/New_York'))

print(ny_time)

同样,在Unix和类Unix系统中,只要正确设置了时区,系统就会自动处理夏令时。

6. ubuntu timedatectl命令示例:查看时间相关信息

在ubuntu里,可使用timedatectl查看以上相应概念:

rtc time,ubuntu,linux,linux,ubuntu

如图,命令结果展示了本地时间(Local time)、系统时间(Universal time)、硬件时间(RTC time)、时区(Time zone)等信息。文章来源地址https://www.toymoban.com/news/detail-758177.html

到了这里,关于Linux 硬件时间(RTC time)、系统时间(UTC时间、Universal time)、本地时间(Local time)、时区(Time zone)与夏令时(DST)解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux之获取系统时间(time函数、gettimeofday函数)

    ①函数功能 :将日历时间参数time转换为一个表示本地当前时间的字符串; ②函数参数 :timer为time()函数获得 ③函数返回值 :返回字符串格式(星期 月 日 小时:分:秒 年); tm结构: ①函数功能 :使用timer的值填充tm结构体,其值会被分解为tm结构,并用本地时区表示;

    2024年02月06日
    浏览(43)
  • Linux hwclock工具介绍(hwclock --systohc、hwclock --hctosys)硬件时钟和系统时钟(硬件时间、系统时间)(时间同步)

    hwclock是Linux系统中的一个重要工具,它主要用于读取和设置硬件时钟。本文将围绕 hwclock --systohc 和 hwclock --hctosys 两个命令进行深入探讨。 在深入讨论hwclock之前,需要先理解硬件时钟和系统时钟的区别。 硬件时钟 (也被称为实时时钟,RTC):它是指电脑主板上的独立的时钟

    2024年02月04日
    浏览(43)
  • Linux 同步系统时间并且写入到硬件

    过年期间,公司的测试服务器长时间断电,导致电脑里面的电池没电,从而时间重置。每次启动项的时候,都得需要重置时间,比较麻烦,从网上找到处理方法,记录一下 1.1 安装wget下载工具 1.2 使用wget下载ntpdate安装包 1.3 安装ntpdate 1.4.通过ntpdate命令同步网络时间 ntpdate NT

    2024年02月08日
    浏览(69)
  • Linux中centos修改系统时间并写到硬件,Linux中centos设置定时自动同步网络时间

    有时候centos会出现时间不准确的情况,这样会导致很多数据的记录时间出错,这时需要我们修改系统时间并写到硬件。 可能我们同步了一段时间之后还会出现时间不准确的情况,这时候将centos设置定时自动同步网络时间,就会很方便。 下面来分别介绍一下这两种方案。 适用

    2024年02月16日
    浏览(50)
  • UTC时间戳与北京时间转换

    在应用中用到了 UTC 时间戳与北京时间进行转换的需求,这里做一个记录,方便后面有需求时直接拿来用。 GMT 时间 :Greenwich Mean Time,格林尼治平时,又称格林尼治平均时间或格林尼治标准时间。是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。 GMT存在较大误差,因

    2024年02月07日
    浏览(47)
  • Java获取当前的UTC时间

    java中如何获取utc时间,并转为Date对象,这是一个常见的问题。可能会找到如下代码的回答: 但是运行过后发现不能获取带UTC时间 那么为什么不能获取,如何正确获取utc时间呢? 分析一下上述代码为什么不能获取正确的UTC时间 看一下 Calendar.getTime() 方法 本质上是通过 getTi

    2024年02月05日
    浏览(39)
  • Unix、UTC、GPS时间戳及转换

    UTC时间 UTC时间的英文全称:Universal Time Coordinated,中文名称:协调世界时。俗的理解为,这个时间是全世界通用的,即全世界都公用的一个时间。可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。 起始时间为:1970年1月1日 北京时

    2024年02月07日
    浏览(34)
  • 关于系统时间的一些time库函数

    (꒪ꇴ꒪ ),hello我是 祐言 博客主页:C语言基础,Linux基础,软件配置领域博主🌍 快上🚘,一起学习! 送给读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏          编程中经常用到时间表达及转换的函数,它们

    2024年02月15日
    浏览(37)
  • 解析TZ字样的0时区UTC时间格式化为东八区

    TZ 的 Z 是zero timezone 0时区的意思。带TZ的时间是UTC=0的时间 SimpleDateFormat默认使用系统日历时区,必须手动指定0时区,才能正确解析TZ时间 详细测试代码见下: 参考

    2024年01月19日
    浏览(40)
  • linux ls命令 --time-style选项 日期时间格式控制

    语法格式: s -l --time-style=xxx命令可以显示时间的格式,xxx:full-iso, long-iso, iso, locale, +FORMAT, ls -l --time-style=full-iso 显示全部时间,包括毫秒在内如: drwxr-xr-x 2 boco boco 4096 2013-10-16 14:49:57.000000000 +0800 Deskt ls -l --time-style=long-iso 显示日期和时间(包括年),以长格式显示yyyy-mm-dd

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包