$ 日期和时间标准
$ 格林尼治平时
英语:Greenwich Mean Time,简称GMT。是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
人们最初确定时间的方式是直接观测太阳在当地天空中的位置,例如使用日晷,这样测量出来的时间被称为地方真太阳时。后来,人们为了解决地球公转轨道不是正圆和黄道与赤道之间存在夹角而造成的测出的时间的流逝不均匀的问题,以假想天体“平太阳”为基准测量时间,这样测量出来的时间被称为地方平太阳时。
后来,格林尼治天文台所在地的地方平太阳时被定义为全世界的时间标准,被称为格林尼治平时,“平时(mean time)”就是“平太阳时(mean solar time)”的意思。
后来,由于1925年以前人们在天文观测中,常常把每天的起始(0时)定为正午,而不是通常民用的午夜,给格林尼治平时的意义造成含糊,人们使用世界时(Universal Time, UT)一词来明确表示每天从午夜开始的格林尼治平时。
目前使用的世界时测算标准又称UT1。在UT1之前人们曾使用过UT0,但由于UT0没有考虑极移导致的天文台地理坐标变动的问题,因此测出的世界时不准确,现在已经不再被使用。在UT1之后,由于人们发现,因为地球自转本身不均匀的问题,UT1定义的时间的流逝仍然不均匀,于是人们又发展了一些对UT1进行平滑处理后的时间标准,包括UT1R和UT2,但它们都未能彻底解决定义的时间的流逝不均匀的问题,这些时间标准现在都不再被使用。
后来,人们为了彻底解决定义的时间的流逝不均匀的问题,开始使用原子钟定义时间。人们首先用全世界的原子钟共同为地球确立了一个均匀流动的时间,称为国际原子时(International Atomic Time, TAI)。然后,为了使定义的时间与地球自转相配合,人们通过在TAI的基础上不定期增减闰秒的方式,使定义的时间与世界时(UT1)保持差异在0.9秒以内,这样定义的时间就是协调世界时(Coordinated Universal Time, UTC)。UTC是目前全世界使用的时间标准。UTC与UT1之间的差异被称为DUT1。
目前,“格林尼治平时”一词在民用领域常常被认为与UTC相同,不过它在航海领域仍旧指UT1。
$ 协调世界时
英语:Coordinated Universal Time,简称UTC。 其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。UTC基于国际原子时,并通过不规则的加入闰秒来抵消地球自转变慢的影响。闰秒在必要的时候会被插入到UTC中,以保证协调世界时(UTC)与世界时(UT1)相差不超过0.9秒。
$ 北京时间
又名中国标准时间(CST),是中国大陆的标准时间,比世界协调时快八小时(即UTC+8),与香港、澳门、台北、吉隆坡、新加坡等地的标准时间相同。
$ ISO 8601
国际标准ISO 8601,是国际标准化组织的日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前是2004年12月1日发行的第三版“ISO8601:2004”。一些示例:
日期 2019-05-27
UTC日期与时间 2019-05-27T06:48:19+00:00
2019-05-27T06:48:19Z
20190527T064819Z
周数 2019-W22
日期与周数 2019-W22-1
无年份标示之日期 --05-27
当年度累积日数 2019-147
$ 日期表示法
年由4位数字组成YYYY,或者带正负号的四或五位数字表示±YYYYY。月、日用两位数字表示:MM、DD。只使用数字为基本格式。使用短横线"-"间隔开年、月、日为扩展格式。
日历日期表示法:如2019年5月27日可表示为2019-05-27,或20190527。
顺序日期表示法:如2004年5月3日可以表示为2004-124,或2004124。
星期日历表示法:如2004年5月3日可写成2004-W19-1或2004W191。
日历星期表示法:如2004年第19个星期可写成:2004-W19或2004W19。
日历月表示法:如2015年7月可写成:201507或2015-07。
日历年表示法:如2015年可写成:2015。
$ 日期时间表示法
只使用数字为基本格式。使用冒号":"间隔开小时、分、秒的为扩展格式。小时、分和秒都用2位数表示。
- ...
- 如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z。Z是相对协调世界时时间0偏移的代号。如下午2点30分5秒表示为14:30:05Z或143005Z;只表示小时和分,为1430Z或14:30Z;只表示小时,则为14Z或14Z。
- 其他时区用实际时间加时差表示,当时的UTC+8时间表示为22:30:05+08:00或223005+0800,也可以简化成223005+08。
$ 日期和时间的组合表示法
合并表示时,要在时间前面加一大写字母T,如要表示北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。
$ Java日期API
Date对象本身所存储的毫秒数可以通过date.getTime()方法得到;该函数返回自1970年1月1日 00:00:00 GMT以来此对象表示的毫秒数。它与时区和地域没有关系(其实可以认为是GMT时间),而且还会告诉我们这个时区是否使用夏令时。
Calendar的getInstance()方法有参数为TimeZone和Locale的重载,可以使用指定时区和语言环境获得一个日历。
TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,即TimeZone表示时区偏移量,本质上以毫秒数保存与GMT的差值。
$ Log4j日期格式
在%d后使用{}表示日期的格式,包括:
- SimpleDateFormat格式:%d{yyyy-MM-dd HH:mm:ss,SSS}
- ISO8601 格式(默认):%d{ISO8601},如
2019-05-27 17:05:56,393
- DateTime格式:%d{DATE},如
27 五月 2019 17:05:56,393
- AbsoluteTime 格式:%d{ABSOLUTE},如
17:05:56,393
参考: