时间戳的理解

背景

最近需求涉及到不同时区的时间展示,发现自己对于时间戳的理解存在误差。

定义

Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
UNIX时间戳的 0 按照 ISO 8601 规范为 :1970-01-01T00:00:00Z.

解释

简单来说,时间戳是当前时间距离 1970-01-01T00:00:00Z 有多少秒。
比如,当前时间为 2022年7月6日10点32分50秒,故这个时间点对应的时间戳为 1657074770

2022年7月6日10点32分50秒 - 1970年1月1日0点0分0秒 = 1657074770 (秒)

这里忽略了两个东西,1970-01-01T00:00:00Z 中,字母T和字母Z是什么含义呢?

日期和时间的表示方法

根据 ISO 8601中规定:

1、对UTC时间最后加一个大写字母Z

例如:UTC时间下午2点30分5秒表示为14:30:05Z

2、日期和时间的合并表示时,要在时间前面加一大写字母T

例如:北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00

所以,字母T是一种固定的表示方式,可以忽略;而UTC时间是什么意思呢?

UTC

UTC为世界标准时间;人为划定一个区域的时间为标准时间。

例如:北京时间 2004-05-03T17:30:08+08:00,其中的+08:00为+8小时,就是相对与标准时间再+8小时

在中国的时间戳

回到时间戳的定义上,时间戳定义为两个时间点的秒数差,那么两个时间点的 时区一致 才能做减法,例如:

在国内获取的当前时间为 2022-07-06 11:19:31,更标准的表示为 2022-07-06T11:19:31 +08:00
在国内计算时间戳时的时间起点为 1970-01-01T00:00:00 +08:00
时间戳 = 2022-07-06T11:19:31 +08:00 - 1970-01-01T00:00:00 +08:00
而不是 2022-07-06T11:19:31 +08:00 - 1970-01-01T00:00:00Z

总结

  • 时间戳是 绝对的,同一时间点上,在世界上任何国家计算出的时间戳均是同一个值
  • 时间是包含时区的,相同时区 的时间才能做减法

延伸

  • 存储中使用时间戳的优势之一是可以在代码中动态的格式化为不同国家(时区)的时间,不受外部环境(如db)的影响

参考资料

unix时间戳定义
ISO 8601
UTC

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值