iSO 8601

標準日期字串 有兩套準 RFC 3339 ,iSO 8601 iSO 8601 一般比 RFC 3339 寬鬆

2020-12-09T16:09:53+00:00 是 RFC 3339,iSO 8601 都可以接受的字串

ISO 8601

有 4 版目前最新是 2019 年版

  • 時間單位的位數固定,不足時於左補0
  • 日期依照年月日時分秒方式排序,如果需要降低精度要從最小的時間開始移除
  • 格式分為只有數字的基礎格式;二為添加分隔符的擴展格式,從而更易讀。標準原文建議應避免在純文字中使用基礎格式。擴展格式使用連字元-來分隔日期,使用冒號:來分隔時間

ISO 8601:2004 規定了一個參考日期,即1875年5月20日但在 ISO 8601-1:2019刪除 對字元大小寫敏感

Format

  • %Y - Year, 4 digits, 0000 到 9999,但0000至1582的年份僅應在雙方有共識時用於通訊
  • %M - Month, 2 digits, 01 到 12
  • %D - Day, 2 digits, 01 到 31
  • %V - Week Year, 4 digits
  • %W - Week, 2 digits, 一年中的第幾周,週數在 01 到 53, 注意 XXXX 年 1 月 1 號不一定是 XXXX-W01
  • %w - Week Day, 1 digits, 星期幾 1 到 7
  • %O - Ordinal Day ,3 digits, 表示一年中的第幾天,001 到 366
  • %h - Hour, 2 digits, (一天中的) 00 到 24,24小時制
  • %m - Minute, 2 digits, 00 到 59
  • %s - Second, 2 digits, 00 到 60,60 只表示潤秒
  • %u - Second-Fraction, n digits, 拿來表達比秒還小的時間單位,位數由通訊雙方定義,表示 %u * $1 / 10^n$ 秒
  • %Z - Zone Hour, 3 digits, 00 到 23, including +/-,First digit must be + or -
  • %z - Zone Minute, 2 digits, 00 到 59

T00:00:00 指涉日曆日開始時刻 T24:00:00 指涉日曆日結束時刻,ISO 8601-1:2019 刪除儘管在早期版本的標準中已經允許這樣做

Date

%Y-%M-%D %Y%M%D

Time

T%h:%m:%s T%h%m%s

Date + Time

%Y-%M-%DT%h:%m:%s %Y-%M-%DT%h:%m:%s.%u %Y%M%DT%h%m%s %Y%M%DT%h%m%s.%u

Sample

20250203T163855+0800 2025-02-03T16:38:55+0800

20040503T173008+08:00 2004-05-03T17:30:08+08:00

Time Zone

%Z:%z %Z%z %Z Z

時區,可選,接在時間後面,如果時區沒有標示表示本地時間,Z 表示 UTC + 00,-00 不被允許

Ordinal Date

%Y-%O %Y%O

可以將一年內的天的序數用3位數字表示

如 2004 年 5 月 3 日可以表示為 2004-124 或 2004124

Week Date

%V-W%W-%w %VW%W%w 很麻煩,別用

2007-W03 2007 年的第 3 周 2007-W03-1 2007 年的第 3 周的星期一

RFC 3339

只接受 %Y-%M-%DT%h:%m:%s%Z:%z, %Y-%M-%D%Z:%z, %h:%m:%s%Z:%z 不接受由小時間開始省略的規則 不接受 Ordinal Date,Week Date,只有數字的基礎格式 對字元大小寫不敏感 一定要寫時區,只接受 %Z:%z 或 Z 作為時區格式,-00 是允許的

4.3 Unknown Local Offset Convention If the time in UTC is known, but the offset to local time is unknown, this can be represented with an offset of “-00:00”

5.6. Internet Date/Time Format NOTE: ISO 8601 defines date and time separated by “T”. Applications using this syntax may choose, for the sake of readability, to specify a full-date and full-time separated by(say) a space character.

如果應用程式有約定可以不用 T 分隔 Date 和 Time

2024 年 4 月,RFC 3339 由 RFC 9557 更新

RFC 3339 vs. ISO 8601

Reference