知識 · 日期與時間
ISO 8601 日期格式是什麼?
簡答
ISO 8601 是以文字表示日期與時間的國際標準。它的核心格式依單位由大到小排列:日期寫成 2026-10-14,帶 UTC 偏移的時刻寫成 2026-10-14T09:30:00+02:00。它也定義了 2026-W42-3 這類週日期、年序日,以及 P3DT4H 這類期間。由於沒有歧義,而且依字母排序就等於依時間排序,多數 API 和資料格式都採用它。
為什麼是 YYYY-MM-DD
03/04/2026 在世界上多數地方是 4 月 3 日,在美國卻是 3 月 4 日。ISO 8601 固定採用「年、月、日」一種順序,年份四位數,月和日兩位數並補零,消除了猜測。
另一個好處是排序:YYYY-MM-DD 形式的字串依字母排序,結果就和日期順序一樣,所以 2026-10-14-report.pdf 這類檔名在任何資料夾中都會正確排列。
| 形式 | 延伸格式(含分隔符號) | 基本格式(精簡) |
|---|---|---|
| 日曆日期 | 2026-10-14 | 20261014 |
| 年序日(一年中的第幾天) | 2026-287 | 2026287 |
| 週日期 | 2026-W42-3 | 2026W423 |
| 時間 | 09:30:00 | 093000 |
| UTC 日期時間 | 2026-10-14T09:30:00Z | 20261014T093000Z |
| 帶偏移的日期時間 | 2026-10-14T11:30:00+02:00 | 20261014T113000+0200 |
時間、時區與字母 Z
時間接在日期後的 T 後面。小時採 24 小時制,秒的小數部分接在小數點後:09:30:00.250。
Z(讀作「Zulu」)表示時間為 UTC:2026-10-14T09:30:00Z。+02:00或-05:00這類偏移表示當地時間及其與 UTC 的差距。2026-10-14T11:30:00+02:00和上面的 UTC 範例是同一個時刻。- 沒有
Z也沒有偏移的時間,是時區未知的當地時間。它符合 ISO 8601,但其他系統無法判斷它指的是哪個時刻。
偏移不等於時區。+01:00 可能是冬季的巴黎,也可能是全年的拉哥斯。ISO 8601 只記錄偏移;時區規則來自其他地方,例如 IANA 時區資料庫。
週日期與週數
ISO 週從星期一開始,第 1 週是包含該年第一個星期四的那一週(也就是包含 1 月 4 日的那一週)。週日期依序寫成年份、W、週數,再加上星期幾,1(星期一)到 7(星期日)。
由於一週不會被拆到兩個年份,在年頭年尾,ISO 週年可能和日曆年不同:
| 日曆日期 | ISO 週日期 | 原因 |
|---|---|---|
| 2021-01-01(星期五) | 2020-W53-5 | 屬於從 2020 年 12 月 28 日星期一開始的那一週 |
| 2024-12-30(星期一) | 2025-W01-1 | 這一週包含 2025 年 1 月 2 日星期四 |
| 2026-01-01(星期四) | 2026-W01-4 | 1 月 1 日本身就是星期四 |
| 2027-01-01(星期五) | 2026-W53-5 | 2026 年從星期四開始,所以有 53 週 |
一年有 52 或 53 個 ISO 週。美式日曆的週數常以星期日為一週開始,且 1 月 1 日一定在第 1 週,可能與 ISO 週數相差一週。
期間與時間區間
期間以 P(period)開頭,先寫日期部分,接著 T,再寫時間部分。為零的部分可以省略。
| 期間 | 意義 |
|---|---|
P3DT4H | 3 天又 4 小時 |
PT30M | 30 分鐘 |
P30M | 30 個月,不是分鐘:T 很重要 |
P1Y2M10D | 1 年 2 個月又 10 天 |
P2W | 2 週 |
PT0.5S | 半秒 |
時間區間以斜線連接兩個部分:2026-10-14/2026-10-20(開始與結束)、2026-10-14T09:00Z/PT2H(開始與期間),或 P1D/2026-10-14(期間與結束)。以年和月表示的期間沒有固定秒數,所以軟體會依日曆來加,而不是加上固定秒數。
RFC 3339:網路上的嚴格規範
ISO 8601 允許許多變化,讓完整的剖析器變得複雜。RFC 3339 為網際網路協定挑選了一種規範,多數 JSON API、Atom 訂閱源和記錄格式都遵循它。
- 必須是完整的日期與時間,且一律使用延伸格式:
2026-10-14T09:30:00Z。 - 每個時間戳記都必須帶
Z或+02:00這類數字偏移;不允許沒有偏移的當地時間。 - 週日期、年序日和期間不在此規範內。
-00:00表示時間為 UTC,但原本的當地偏移未知。- RFC 提到,為了方便閱讀,可以用空格取代
T,許多資料庫就是這樣輸出的。
常見問題
ISO 8601 日期中的 T 是什麼意思?
T 用來分隔日期和時間,例如 2026-10-14T09:30:00。RFC 3339 也接受在該位置使用空格,以方便閱讀。
時間戳記結尾的 Z 是什麼意思?
Z 表示時間為 UTC,偏移為零。09:30:00Z 和 09:30:00+00:00 描述的是同一個時刻。
ISO 8601 和 RFC 3339 一樣嗎?
RFC 3339 是 ISO 8601 為網際網路用途而訂的更嚴格子集。每個 RFC 3339 時間戳記都是合法的 ISO 8601,但 ISO 8601 還允許 RFC 3339 不允許的形式,例如週日期和期間。
ISO 8601 的第 1 週是哪一週?
第 1 週是包含該年第一個星期四、從星期一到星期日的那一週。所以 1 月 1 日可能落在前一年的第 52 或 53 週。