时间格式和时区

2021/04/27 0 Java 共 1992 字,约 6 分钟
臭粑粑大朱

一直以来都搞不懂这些时间格式,以后忘记了可以来查。

名词解释:

  • GMT:「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)

  • UTC:「世界协调时间」(Coordinated Universal Time)(又称世界标准时间、世界统一时间)

  • DST:「夏日节约时间」(Daylight Saving Time,简称D.S.T.)(又称日光节约时制、夏令时间)

  • CST:「4个不同的时区」
    • Central Standard Time (USA) UT-6:00(美国CST:减6个小时)
    • Central Standard Time (Australia) UT+9:30(澳大利亚CST:加9个半小时)
    • China Standard Time UT+8:00(中国CST:加8个小时)(GMT+8)

    • Cuba Standard Time UT-4:00(古巴CST:减4个小时)
    • CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
  • CET:「欧洲中部时间」(Central European Time)

  • RTC:「Linux 的系统硬件时间」(RTC 是集成电路,通常称为时钟芯片的时间)
  • Unix时间戳:从(1970年01月01日 0:00:00)开始计算秒数,这个秒数就是Unix时间戳

各时间关系

UTC = GMT

CET = UTC/GMT + 1 小时

CST = UTC/GMT + 8 小时

CST = CET + 7 小时

UTC 和 ISO8601

1. UTC

UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,GMT与UTC的功能与精确度是没有差别的。UTC时间+时区偏移量就是当地时间,如北京东8区(GMT+8),则UTC时间+08小时就表示北京时间。

2. ISO8601

ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。

目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。 它规定了日期时间的各种表示方法,它的一般原则:

  • 日期和时间值按从最大到最小的时间单位排序:年,月(或周),日,小时,分钟,秒和秒的分数。因此,表示的字典顺序对应于时间顺序,除了涉及负年份的日期表示。这允许日期自然地由例如文件系统排序。
  • 每个日期和时间值都有一个固定的位数,必须用前导零填充。
  • 日期时间表示只能有数字或少数特殊字符组成(如 “ - ”,“ : ”,“ T ”,“ W ” 和 “ Z ”),不允许出现地方写法,如 “1月” 或 “星期四” 等。
  • 表示可以采用两种格式之一完成 - 具有最少数量分隔符的基本格式或添加了分隔符的扩展格式以增强人类可读性。该标准指出“应以纯文本形式避免使用基本格式”。日期值(年,月,周和日)之间使用的分隔符是连字符,而冒号用作时间值(小时,分钟和秒)之间的分隔符。例如,2009年第1个月的第6天可以以扩展格式写为 “2009-01-06” ,或者以基本格式简称为 “20090106” 而不含糊不清。
  • 为了降低准确度,可以从任何日期和时间表示中删除任意数量的值,但是从最小到最重要的顺序。例如, “2004-05” 是有效的ISO 8601日期,表示2004年5月(第5个月)。此格式永远不会代表2004年未指定月份的第5天,也不代表从2004年进入2005年。
  • ISO 8601使用24小时制。HH:MM:SS.SSS,HH:MM:SS,HH:MM,HH为合规的时间格式。
  • 如果没有指定与UTC关系则假定是本地时间,为安全的跨时区通讯,应制定与UTC关系。若时间是UTC则在时间后面加Z表示,如 “09:30UTC” 表示为 “09:30Z” 或 “0930Z” 。其它时区时间则将与UTC的偏移量附加到时间后面,格式为±[hh]:[mm],±[hh] [mm]或±[hh],如 “北京时间09:30” 表示为 “09:30+08:00” 或 “09:30+0800” 或 “09:30+08” 。
  • 用字母T分割日期和时间。如 20180703T224426Z 或 2018-07-03T22:44:26Z 。
// 例子:

// Fri Apr 30 11:39:02 CST 2021
System.out.println(new Date());

// 2021-04-30T11:39:02.685
System.out.println(LocalDateTime.now());

文档信息

查找

    Table of Contents