Unix时间戳(Unix TimeStamp),实质上是一个向上计数的秒计数器,不分年月日时分秒,它的起始点为伦敦标准时间的1970年1月1日0时0秒,截止到2023年,时间戳的计数已经有16亿多,一般的计算机采用的都是32位的整形数据,计数最高为21亿多,经人计算,2038年会出现计算机危机,也就是计数溢出,STM32的RTC采用的为无符号32位整形数据,2100年才会有这个问题不必担心,但随着时代发展,目前大多数使用的是64位。
使用Unix时间戳是好处,第一就是硬件电路简单,只需要设置一个秒计数寄存器;第二就是在进行时间间隔计算的时候不需要考虑年月日等,只需要将两个时刻相减,得到秒差。坏处就是占用软件资源较多,比如你需要将当前的秒数转换成日常生活用的年月日时分秒,还要考虑闰年闰月这些东西,这就需要计算机经过一系列复杂的运算了。
另外,上面也说了起始点是伦敦时间,秒数转换成的时间当然也是伦敦时间了,想要得到北京时间,这就要加上八个小时了,这是因为地球每个经度的时间是不一样的,每相差一个时区就要加减一个小时,北京的时区为东八区。举个例子,时间戳转换成的时间为1970.1.1 0:0:0,那么北京时间就是1970.1.1 8:0:0了。
时间戳是不考虑闰秒的,那么闰秒又是什么?首先得知道UTC跟GMT了。GMT(Greenwich Mean Time),格林尼治标准时间,是一种以地球自转为基础的时间计量系统,但地球自转因为自然因素的影响是越来越慢的,会导致产生时间误差,一秒的时间会变慢,考虑到这个因素,UTC就产生了。UTC(Unive