ISO 8601

国际标准ISO 8601，是国际标准化组织的日期和时间的表示方法，全称为《-{zh-cn:数据元和交换格式 信息交换 日期和时间表示法; zh-tw:资料元件及交换格式－资讯交换－日期及时间表示法;}-》。目前是2004年12月1日发行的第三版「ISO8601:2004」以替代1998年的第一版「ISO8601:1998」与2000年的第二版「ISO8601:2000」。

**基本原则**
时间日期按照年月日时分秒的顺序排列，大时间单位在小时间单位之前。除了公元前的时刻外，用本标准表示的两个时刻中较早者在字典序上先于较晚者。这个特性有利于按时间排序。
*每个时间单位的位数固定，不足时于左补0。
*本标准提供两种方法来表示时间：其一为衹有数字的基础格式；其二为添加分隔符的扩展格式，从而更易读。标准原文建议“应避免在纯文本中使用基础格式”。扩展格式使用连字符“-”来分隔日期，使用冒号“:”来分隔时间。比如2009年1月6日在扩展格式中可以写成"2009-01-06"，在基本格式中可以简单地写成“20090106”而不会产生歧义。
*精度不足时，可以从右侧开始忽略日期或时间的某个单位。比如2004年5月可以表示为“2004-05”（第五个月）。这种格式永远不会表示2004年未指定月份的第5天，也不会表示从2004年至2005年。
*实际运用中需要更高的精度时，可以在秒数后添加十进制小数。

**日期表示法**
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”表示二十世纪的第二个十年，“19”表示二十世纪。表示二十一世纪的某年时，ISO 8601:2000允许省去年份的前两位，形如“YYMMDD”，相当于“20YY-MM-DD”，但是ISO 8601:2004禁止了这种表示方式。

**顺序日期表示法**
完全表示：可以将一年内的天的序数用3位数字表示，平年365天，闰年366天。如2004年5月3日可以表示为2004-124或2004124。

**星期日历表示法**
使用年份和星期表示某一日期的格式形如YYYYWwwD或YYYY-Www-D，YYYY表示年份，其值与年月日格式中的年份略有差别；Www表示该日期所属星期是今年的第几个星期，范围在W01到W53之间；D表示该日是本星期的第几天，范围在1到7之间，每个星期以周一作为第一天。例如1926年8月17日可写成1926-W33-2或1926W332。
每年的第一个星期可以用如下方法决定：
# 本年度第一个星期四所在的星期；
# 1月4日所在的星期；
# 本年度第一个至少有4天在同一星期内的星期；
# 星期一在去年12月29日至今年1月4日以内的星期。
推理可得，如果1月1日是星期一、星期二、星期三或者星期四，它所在星期就是本年第一个星期；如果1月1日是星期五、星期六或星期日，则它所在星期就是上一年第52或者53个日历星期；12月28日总是在一年最后一个星期。

**日历星期表示法**
可以用2位数表示本年内第几个日历星期，但日历星期前要加上一个大写字母W。
其他规定同星期日历表示法。
例如，如2004年第19个星期可写成：2004-W19或2004W19。

**日期时间表示法**
只使用数字为基本格式。使用冒号“:”间隔开小时、分、秒的为扩展格式。小时、分和秒都用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: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。

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

**时间间隔表示法**
从一个时间开始到另一个时间结束，或者从一个时间开始持续一个时间间隔，要在前后两个时间（或时间间隔）之间放置斜线符“/”。格式为以下中的一种：
/
/
/

例如19850412/19860101，19850412/P6M。

**循环时间表示法**
前面加上一大写字母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等效采用。