时间戳,UTC时间,时区

发布时间 2023-10-18 15:51:45作者: 苹果芒

先给大家总结一下:

1.时间戳( UTC 1970.01.01 00:00:00 到现在的总秒数/毫秒数)就是时间戳,它跟时区无关的。所以在任何国家的服务器上执行一段代码(System.currentTimeMills();),获取到的时间戳都是相同的。

2.UTC时间就是现在的全球通用时间标准。

 

UTC

UTC(Universal Time Coordinated),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。

简单来说你可以理解为就是一个规范,所有国家都愿意遵守这个规范来计时,所有国家都用相同的规范,在时间的计算上面就方便很多。

 

GMT

GMT(Greenwich Mean Time), 格林威治平时(也称格林威治时间)。它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。

1972年之前,格林威治时间(GMT)一直是世界时间的标准。1972年之后,GMT 不再是一个时间标准了。

简单来说这也是一个规范,不过是 1972 年之前的,在这之后基本都使用 UTC 了,想比之下 GMT 和 UTC 在精确到秒的时候是一样的,如果需要精确到秒级甚至以下单位需要使用 UTC

 

Unix 时间戳

这是基于 UTC 1970.01.01 00:00:00 到现在的总秒数/毫秒数所以这个总秒数/毫秒数全世界都是一样的也就是说 Unix 时间戳和时区无关你可以在两个不同时区的服务器执行以下 Java 代码来验证,得出的结果是相同的。

System.currentTimeMills();

如果你没有国外服务器, 你可以使用 docker 运行两个容器,在环境变量中指定不同时区即可。

本地时间

在日常生活中所使用的时间我们通常称之为本地时间。这个时间等于我们所在(或者所使用)时区内的当地时间,它由与世界标准时间(UTC-0)之间的偏移量来定义这个偏移量可以表示为 UTC- 或 UTC+ ,后面接上偏移的小时。每往东一个时区就 +1 小时 ,每往西一个时区是 -1 小时,例如我们中国的北京时间相对于UTC-0的偏移量是 UTC+8 。

注意,在 PostgreSQL 中,UTC+、- 是相反的,UTC-8 代表的是相对于 UTC 加八个小时,反之减八个小时......

结语

我相信很多朋友和我一样之前都没有做过跨国项目,可能很少关注过时区相关的东西。这篇文章搞清楚了时区的基本知识,下一篇会为大家介绍 Java8 新一代时间 API 。