Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ISO8601/2020-12-23-llt18

 ISO8601/2020-12-23-llt18

社内のLTイベント「えるLT Vol.18 オンライン」で発表した資料です

Satoshi SAKAO

December 23, 2020
Tweet

More Decks by Satoshi SAKAO

Other Decks in Programming

Transcript

  1. ISO 8601とは • 情報交換のための,日付や時刻の文字列表現に関する標準 • Example • 日本時間(JST) 2020年12月23日20時0分0秒 •

    2020-12-23T20:00:00+09:00 • オレオレ設計する前に,考えの起点にするのがよさそう 3 ISO 8601 format
  2. 標準化の対象 • 日付 • 時刻(と時差) • 日時 • 時間間隔 •

    反復時間間隔 4 2020-12-23 20:00:00+09:00 2020-12-23T20:00:00+09:00 P1DT12H R4/2020-12-23T20:00:00/P20H Example
  3. 記法 • 基本形式と拡張形式 • 基本形式: 20201223200000 • 拡張形式: 2020-12-23T20:00:00 •

    完全表記と省略表記 • 完全表記: 2020-12-23 (2020年12月23日) • 上位省略: --12-23 (ある年の月日) • 下位省略: 2020-12 (特定の月) • 代用形式 • 拡大表記 5 TODAY TODAY
  4. 時刻 • 地方時: 20:00:00 • UTC時: 11:00:00Z • 時差の表記: 20:00:00+09:00

    • 小数表記 • 20.5 (20時30分00秒) • 20:10.5 (20時10分30秒) • 20:20:40.5 (20時20分40.5秒) 7
  5. 時間間隔 • 経過時間 • P2Y1MT30.5M (2年1ヶ月30分30秒) • 始点と終点 • 2020-12-23T20:00:00/2020-12-24T00:00:00

    (2020年12月23日20時0分0秒から2020年12月24日0時0分0秒) • 始点と経過時間 • 2020-12-23T20:00:00/P2H (2020年12月23日20時0分0秒から2時間) • 経過時間と終点 • PT30M/2020-12-23T20:00:00 (2020年12月23日20時0分0秒までの30分) 9
  6. 反復時間間隔 • 反復回数+経過時間 • R3/P1W (1週間を3回) • 反復回数+始点と終点 • R10/2020-12-23T20:00:00/2020-12-23T21:00:00

    (2020年12月23日20時0分0秒から2020年12月23日21時0分0秒までの時間間隔を10回) • 反復回数+始点と経過時間 • 反復回数+経過時間と終点 10
  7. 1. よくみるオレオレ連携仕様の改善 • 情報交換においては,人への表現形式よりも 効率性の高さや曖昧さの少なさが重要 • メジャーなAPIにおける日時表現はISO 8601(GitHub REST APIとか)

    • 多くの言語は日時のISO 8601形式の変換をサポートしている • Java: java.time.OffsetDateTime • .Net: ラウンドトリップ ("O", "o") 書式指定子 • JavaScript: Date.toISOString() • Swift: ISO8601DateFormatter • Python: datetime.isoformat() 13
  8. 2. 曜日の数値表現 14 ݄ Ր ਫ ໦ ۚ ౔ ೔

    0 1 2 3 4 5 6 1 2 3 4 5 6 7 2 3 4 5 6 7 1
  9. 2. 曜日の数値表現 15 ং਺ ༵೔໊ 01 ݄༵೔ 02 Ր༵೔ 03

    ਫ༵೔ 04 ໦༵೔ 05 ༵ۚ೔ 06 ౔༵೔ 07 ೔༵೔ cf) JIS X 0301:2002 4.3.2.2 ྺि
  10. 補足 • 拡大表記 • example: 4桁の西暦では足りないとき • +10001-12-23 (10001年12月23日) •

    時刻 • 指示記号 T をつけてもよい: T20:00:00 • 00:00:00 と 24:00:00 はどちらも夜の12時 • 日付や期間でない場合は同義 • 24:00:00 は時間間隔の終了点にだけ使うのが望ましい • うるう秒は考慮されている(秒は0-60が定義されている) 20
  11. 日本向けの拡張(JIS X 0301) • 元号表記: R02.12.23 • あんまり使わないほうがよいと思う・・・(私見) • R(令和)が出たことで反復時間間隔の指示記号と混同する

    • 基本形式が YY.MM.DD なので,異なる元号の年が 同じ表現になる(たぶん) • 人向けの表現にはよいけど,データ交換用には不適当かも 21
  12. 規格書の参照 • ISOは有料 • JISは無料ユーザ登録で閲覧のみ可能(DLや印刷は不可) • 今回はJIS X 0301にISO 8601の翻訳が含まれていたので,

    JISを参照した • JIS X 0301 「情報交換のためのデータ要素及び交換形式ー 日付及び時刻の表記」 23