ISO_8601

**國際標準 ISO 8601**，是國際標準化組織的日期和時間的表示方法，全稱為《資料元件及交換格式－資訊交換－日期及時間表示法》。目前是 2004 年 12 月 1 日發行的第三版「**ISO8601:2004**」以替代 1998 年的第一版「**ISO8601:1998**」與 2000 年的第二版「**ISO8601:2000**」。

## 基本原則

* 時間日期按照年月日時分秒的順序排列，大時間單位在小時間單位之前。除了公元前的時刻外，用本標準表示的兩個時刻中較早者在字典序上先於較晚者。這個特性有利於按時間排序。
* 每個時間單位的位數固定，不足時於左補 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-124** 或 **2004124**。

### 星期日曆表示法

可以用 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-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 等效採用。

 

## 參考文獻