UTC、GMT、时间戳之间的关系

时区

世界时区的划分以本初子午线为标准,向东12个时区,向西12个时区,子午线所在区为0时区,东十二区和西十二区重合,所以一共是24个时区。

GMT和UTC

GMT: 即格林威治时间(Greenwich Mean Time),也是0时区的标准时间。指太阳横穿格林威治子午线(本初子午线)时的时间。但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用。
UTC: 即协调世界时间(Coordinated Universal Time)。UTC是以原子时秒长为基础,在时刻上尽量接近于GMT的一种时间计量系统。UTC现在作为世界标准时间使用。

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

时间戳

UNIX时间戳:是从UTC时间1970年1月1日起到现在的秒数,不考虑闰秒,一天有86400秒,它是和时区无关的,无论在地球上的那个角落,同一时刻,UNIX时间戳都是一样的,计算机的本地时间就是根据 Unix时间戳 + 时区差 转换而来的。

本地时间

本地时间 = UTC + 时区差
时区差:东为正,西为负。在此,把东八区时区差记为 +0800, UTC 是标准时间参照,GMT(格林威治时间)、CST(北京时间)、PST(太平洋时间)等等是具体的时区,兑换如下:

GMT: UTC +0    =    GMT: GMT +0
CST: UTC +8    =    CST: GMT +8
PST: UTC -8    =    PST: GMT -8

总结

  1. 涉及到多个时区的转换,统一使用unix时间戳存储或交互,或者使用带有时区信息的字符串。
  2. 尽量在上层的代码层面修改时区配置,不要修改系统或软件的配置,防止其他程序因为修改受到影响。

你可能感兴趣的:(Java,Linux)