ISO 8601

国际标准ISO 8601,是国际标准化组织的日期和时间的表示方法,全称为《数据元和交换格式 信息交换 日期和时间表示法》。目前是2004年12月1日发行的第三版“ISO8601:2004”以替代1998年的第一版“ISO8601:1998”与2000年的第二版“ISO8601:2000”。

日期和时间的表示方法 [重新整理]
日期2023-03-15
UTC日期与时间2023-03-15T17:07:39+00:00
2023-03-15T17:07:39Z
20230315T170739Z
周数2023-W11
日期与周数2023-W11-3
无年份标示之日期--03-15[1]
当年度累积日数2023-074

基本原则

  • 时间日期按照年月日时分秒的顺序排列,大时间单位在小时间单位之前。除了公元前的时刻外,用本标准表示的两个时刻中较早者在字典序上先于较晚者。这个特性有利于按时间排序。
  • 每个时间单位的位数固定,不足时于左补0。
  • 本标准提供两种方法来表示时间:其一为衹有数字的基础格式;其二为添加分隔符的扩展格式,让人能更容易阅读。标准原文建议“应避免在纯文本中使用基础格式”。扩展格式使用连字符“-”来分隔日期,使用冒号“:”来分隔时间。比如1919年8月10日上午11时45分14秒在基础格式中表示为"19190810T114514",在扩展格式中表示为"1919-08-10T11:45:14"。
  • 精度不足时,可以从右侧开始忽略日期或时间的某个单位。比如2004年5月可以表示为"2004-05"。
  • 实际运用中需要更高的精度时,可以在秒数后添加十进制小数。

日期表示法

ISO 8601使用公历。ISO 8601:2004规定了一个参考日期,即1875年5月20日,当天《米制公约》在巴黎签署;ISO 8601-1:2019删除了此参考日期。不过公历自1582年10月15日公布后到米制公约签署前的日期也一直适用此标准。

至于公布公历前的日期,若通信双方达成一致,也可以用公历表示。标准要求推导这些日子在格里历中对应的日期,而不能直接使用儒略历。

年份

为了规避千年虫问题,标准要求至少使用四位数来表示年份,形如"YYYY"。这样可以表示0000至9999的年份,其中0000意为公元前1年,如同天文纪年。不过这并不完全适用于1583年之前的年份。标准规定“0000至1582的年份仅应在双方有共识时用于通信”。

若要表示前1年之前或9999年之后的年份,标准也允许有共识的双方扩展表达方式。双方应事先规定增加的位数,并且年份前必须有正号“+”或负号“-”而不使用“AD/BC”或“CE/BCE”表示之。依据标准,若年份带符号,则前1年为"+0000",前2年为"-0001",依此类推。

日历日期

月份和日各使用两位数字表示。月份在01到12之间,日期在01到31之间。表示日期的基本格式为"YYYYMMDD",扩展格式为"YYYY-MM-DD"。例如,1919年8月10日可以表示为"19190810"或"1919-08-10"。

标准也允许更低的精度。例如"1919-08"表示1919年8月(不可以表示为"191908"以防止有人理解为2019年19月8日),"1919"表示1919年,"191"表示1910年代,"19"表示二十世纪。表示二十一世纪的某年时,可以省去年份的前两位,形如"YYMMDD",相当于"20YY-MM-DD"。

顺序日期表示法

完全表示:可以将一年内的天的序数用3位数字表示,平年365天,闰年366天。如2004年5月3日可以表示为2004-1242004124

星期日历表示法

可以用2位数表示年内第几个日历星期,再加上一位数表示日历星期内第几天,但日历星期前要加上一个大写字母W,如2004年5月3日可写成2004-W19-1或2004W191。但2005-W011是从2005年1月3日开始的,前几天属于上年的第53个日历星期。每个日历星期从星期一开始,星期日为第7天。

第一个日历星期有以下四种等效说法: 1,本年度第一个星期四所在的星期; 2,1月4日所在的星期; 3,本年度第一个至少有4天在同一星期内的星期; 4,星期一在去年12月29日至今年1月4日以内的星期;

推理可得,如果1月1日是星期一、星期二、星期三或者星期四,它所在的星期就是第一个日历星期;如果1月1日是星期五、星期六或者星期日,它所在的星期就是上一年第52或者53个日历星期;12月28日总是在一年最后一个日历星期。

日历星期表示法

可以用2位数表示本年内第几个日历星期,但日历星期前要加上一个大写字母W。 其他规定同星期日历表示法。

例如,如2004年第19个星期可写成:2004-W192004W19

日期时间表示法

只使用数字为基本格式。使用冒号“:”间隔开小时、分、秒的为扩展格式。小时、分和秒都用2位数表示。

对于当地时间15时27分46秒,

  • 完全表示:152746或15:27:46
  • 缺省小时的特定分和秒:-2746或-27:46
  • 降低精度仅有小时和分:1528或15:28
  • 缺省小时的特定分:-28
  • 缺省日的特定小时:15
  • 带有小数的当地时间的完全表示:152735.5或15:27:35.5
  • 缺省小时的分,带有小数的秒:-2735.5或-27:35.5
  • 午夜,一日的开始:完全表示为000000或00:00:00;仅有小时和分表示为0000或00:00
  • 午夜,一日的终止:完全表示为240000或24:00:00;仅有小时和分表示为2400或24:00
  • 如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z。Z是相对协调世界时时间0偏移的代号。如下午2点30分5秒表示为14:30:05Z143005Z;只表示小时和分,为1430Z或14:30Z;只表示小时,则为14Z或14Z。
  • 其他时区用实际时间加时差表示,当时的UTC+8时间表示为22:30:05+08:00223005+0800,也可以简化成223005+08

日期和时间的组合表示法

合并表示时,要在时间前面加一大写字母T,如要表示东八区时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:0020040503T173008+08

时间段表示法

如果要表示某一作为一段时间间隔,前面加一大写字母P,但时间段后都要加上相应的代表时间的大写字母。如在一年三个月五天六小时七分三十秒内,可以写成P1Y3M5DT6H7M30S

时间间隔表示法

从一个时间开始到另一个时间结束,或者从一个时间开始持续一个时间间隔,要在前后两个时间(或时间间隔)之间放置斜线符“/”。格式为以下中的一种:

<起始時間>/<結束時間>
<起始時間>/<時長>
<時長>/<結束時間>
<時長>

例如19850412/19860101,19850412/P6M

循环时间表示法

前面加上一大写字母R,格式为:

R【循环次数】【/开始时间】/时间间隔【/结束时间】

如要从2004年5月6日北京时间下午1点起时间间隔半年零5天3小时循环,且循环3次,可以表示为R3/20040506T130000+08/P0Y6M5DT3H0M0S

如以1年2个月为循环间隔,无限次循环,最后循环终止于2025年1月1日,可表示为R/P1Y2M/20250101

对应的各地标准

  • 中国国家标准CNS 7648《资料元件及交换格式-资讯交换-日期及时间表示法》与ISO 8601:2004等效采用。
  • 中华人民共和国国家标准GB/T 7408-2005《数据元和交换格式 信息交换 日期和时间表示法》与ISO 8601:2000等效采用。


参考文献

  1. ^ last in ISO8601:2000, in use by RFC 6350 - vCard Format Specification. IETF. August 2011 [2016-06-29]. (原始内容存档于2016-05-31). Truncated representation, as specified in [ISO.8601.2000], Sections 5.2.1.3 d), e), and f), is permitted.