聊聊时间(1)——UNIX时间戳和UTC时间

乐创客 2021-03-15 00:00
文/Edward



各位小伙伴们,大家好,本文是农历辛丑年本公众号所发表的第一篇文章。时光如梭,短短的一年又过去了,不禁时时感叹时间之匆匆。就好像朱自清说的“我的日子滴在时间的流里,没有声音,也没有影子”。既然说到了时间这个话题,本文就借此来详细地聊一下时间。本文中接下来的内容可能会涉及到天文,地理,历史,计算机等方面的知识。但不会涉及到相对论等宏观的宇宙学原理。



历法与时间

世界上主流的历法根据参照物的不同可以分为阴历和阳历。所谓阴历是以月亮作为计时参照物的历法,阳历是以太阳作为计时参照物的历法。在人类过去的几千年发展历程中,有各种各样标准的阴历和阳历,这些历法的计时准确度各不相同。当然,中国古代的历法严格意义上来说应该被称为农历而不是阴历,因为农历不仅有着以阴历为基础的计时系统,还有着以“二十四节气”为代表的阳历计时系统。

近代以来,随着西方工业革命后欧洲的崛起,它的历法“格里高利历”(1582年颁行)也被全世界绝大多数国家所使用,这个“格里高利历”即为我们俗称的“公历”。公元,是纪年法称谓,为纪年体系。该纪年法是以耶稣诞生为公元元年,公元元年之前的称公元前。所谓的2020年就是从公元元年开始算起的两千零二十年。在公历纪年系统中,规定了一年有365天(平年)每4年产生一个闰年(366天)。因此,普通年份能被4整除,且不能被100整除的,是闰年(如2004年就是闰年),世纪年份能被400整除的是闰年(如2000年是闰年,1900年不是闰年)。

以上是对纪年法的简述,仔细回想一下,我们精确地表述某一时刻的时候,一般表述为:XXXX年XX月XX日XX时XX分XX秒。由此可以看出,一个精准的时刻是由“年月日时分秒”这六个部分组成的,而这六个部分中,可以大体分成两类,一类是由“年月日”组成的日期,第二类是由“时分秒”组成的时间。第一类是与我们之前讲述的纪年法相关,第二类则完完全全是由时间所组成。

在现代历法中,一天由24个小时组成,这个大家都知道。但是,由于我们地球是一个球体,,因此导致了地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早。东边时刻与西边时刻的差值要以时计,而且还要以分和秒来计算,这给人们带来不便。

为了克服时间上的混乱,1884年在华盛顿召开的一次国际经度会议(又称国际子午线会议)上,规定将全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)、东1—12区,西1—12区。每个时区横跨经度15度,时间正好是1小时。最后的东、西第12区各跨经度7.5度,以东、西经180度为界。每个时区的中央经线上的时间就是这个时区内统一采用的时间,称为区时,相邻两个时区的时间相差1小时。如图1所示。


图1 世界时区图



 2  GMT和UTC和UNIX时间戳

GMT,即格林尼治标准时间,也就是世界时。GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间。但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用。

UTC,即协调世界时。UTC是以原子时秒长为基础,在时刻上尽量接近于GMT的一种时间计量系统。为确保UTC与GMT相差不会超过0.9秒,在有需要的情况下会在UTC内加上正或负闰秒。UTC现在作为世界标准时间使用。

所以,UTC与GMT基本上等同,误差不超过0.9秒。

计算机中的UNIX时间戳,是以GMT/UTC时间(1970-01-01T00:00:00)为起点,到具体时间的秒数,不考虑闰秒。这么做当然是为了简化计算机对时间操作的复杂度。

比如我的电脑现在的系统时间为2021年3月5日21点23分0秒,因为我的电脑默认时区为东8区,则0时区的时间为2021年3月5日13点23分0秒,则UNIX时间戳为1614950580秒。

有了上面准备知识之后,有一个问题需要大家思考,计算机(RTC芯片或者RTC模块)到底是如何来存储时间的?很显然,有了上述的铺垫之后,我们可以知道,所有的RTC模块或者RTC芯片其内部只不过是一个计数器,准确地说应该是(秒)计数器,它在工作时,受秒晶振触发,每一秒计数一次。

当我们需要读取时间的时候,就用软件或者硬件的手段将UNIX时间戳转换成UTC时间,然后根据计算机的时区,将其修正为当前时区的时间。

当我们需要设置时间的时候,芯片使用软件或者硬件手段将需要设置的当前时区的时间先转成UTC时间,接着将UTC时间转换成UNIX时间戳,最后将其写入RTC模块或者芯片的计数器存储器里面。


 3  为何我们还需要研究UNIX时间戳转换成UTC时间的代码?

既然我们现在有了众多的RTC模块,为什么还要来研究UNIX时间戳如何转换成UTC时间呢?这个话题的开展,是源于STM32F103系列单片机的使用。众所周知,STM32单片机全系拥有RTC功能,但是对于STM32F103系列的单片机,它的RTC时钟非常简单,归根到底,它就是一个32位数据长度的非易失性秒计数器(VBAT引脚保证不掉电)。它并没有任何功能模块可以将这个计数器里面的时间转换成UTC时间,你能得到的仅仅是一个32位的寄存器数值,这个RTC寄存器会在你设置的初始计数值的前提下,每1秒进行自加,其内部简化结构如图2所示。


图2 STM32F103 内部RTC简化结构图


因此,我们如果想要使用这个RTC来进行时间计数时,最简单标准的做法如下:

(1)当用户需要校准时间时,先将用户设置的当地时区时间转换成UTC时间,然后将UTC时间转换成UNIX时间戳写入RTC计数器,RTC计数器更新完成初始时间后,进行秒自加;

(2)当用户程序需要读取时间时,先将当前RTC计数器中的UNIX时间戳读出,然后将其转换成UNIX时间戳转换成UTC时间,最后,将UTC时间转换成当地时间进行显示。

具体步骤如图3所示。


图3 读取STM32F103中RTC的步骤


接下来的文章中,我们将会详细讨论UNIX时间戳和UTC时间的转换算法。




乐创客 我们从来不培养程序猿,我们只是嵌入式技术的搬运工
评论
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 63浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 57浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 166浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 86浏览
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 168浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 55浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 53浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 68浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 54浏览
  • 物联网(IoT)的快速发展彻底改变了从智能家居到工业自动化等各个行业。由于物联网系统需要高效、可靠且紧凑的组件来处理众多传感器、执行器和通信设备,国产固态继电器(SSR)已成为满足中国这些需求的关键解决方案。本文探讨了国产SSR如何满足物联网应用的需求,重点介绍了它们的优势、技术能力以及在现实场景中的应用。了解物联网中的固态继电器固态继电器是一种电子开关设备,它使用半导体而不是机械触点来控制负载。与传统的机械继电器不同,固态继电器具有以下优势:快速切换:确保精确快速的响应,这对于实时物联网系统至
    克里雅半导体科技 2025-01-03 16:11 172浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 36浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 45浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦