Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ISO8601/2020-12-23-llt18
Search
Satoshi SAKAO
December 23, 2020
Programming
0
180
ISO8601/2020-12-23-llt18
社内のLTイベント「えるLT Vol.18 オンライン」で発表した資料です
Satoshi SAKAO
December 23, 2020
Tweet
Share
More Decks by Satoshi SAKAO
See All by Satoshi SAKAO
Testcontainers/2024-11-20-llt32
ottijp
0
19
Pkl/2024-04-17-llt31
ottijp
0
55
JavaScriptのデバッグ/2023-09-04-llt30
ottijp
0
120
CDK for TerraformでAzureリソースをデプロイする/2023-05-15-llt29
ottijp
1
180
TWELITEへの誘い/2022-12-27-llt28
ottijp
0
130
ビルドツールBazelを触ってみた/2022-09-28-llt27
ottijp
0
130
HashiCorp Vaultを使ったシークレットのセキュアな一元管理 〜Ansibleを添えて〜/2022-07-12-llt26
ottijp
0
120
AWSインフラのデプロイをCDKでカイゼンする/2022-03-23-llt25
ottijp
0
67
Amazon Timestreamでデータ補間/2021-12-27-llt24
ottijp
0
82
Other Decks in Programming
See All in Programming
バグを見つけた?それAppleに直してもらおう!
uetyo
0
170
testcontainers のススメ
sgash708
1
120
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
.NET 9アプリをCGIとして レンタルサーバーで動かす
mayuki
1
770
Full stack testing :: basic to basic
up1
1
930
良いユニットテストを書こう
mototakatsu
4
1.8k
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
Effective Signals in Angular 19+: Rules and Helpers @ngbe2024
manfredsteyer
PRO
0
130
103 Early Hints
sugi_0000
1
220
Featured
See All Featured
Side Projects
sachag
452
42k
How STYLIGHT went responsive
nonsquared
95
5.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Automating Front-end Workflow
addyosmani
1366
200k
Code Reviewing Like a Champion
maltzj
520
39k
A better future with KSS
kneath
238
17k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
The Language of Interfaces
destraynor
154
24k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Music & Morning Musume
bryan
46
6.2k
Optimizing for Happiness
mojombo
376
70k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Transcript
ISO 8601 Satoshi SAKAO えるLT Vol.18 2020-12-23T20:00:00 1 情報交換のための 日時の文字列表現
話すひと 2 インフォコム株式会社 品質マネジメント推進室 ソフトウェアエンジニア JS (ES6) / Node.js /
GCP / IoT / iOS (Swift) 猫, @lowcostcosplayth Satoshi SAKAO @ottijp
ISO 8601とは • 情報交換のための,日付や時刻の文字列表現に関する標準 • Example • 日本時間(JST) 2020年12月23日20時0分0秒 •
2020-12-23T20:00:00+09:00 • オレオレ設計する前に,考えの起点にするのがよさそう 3 ISO 8601 format
標準化の対象 • 日付 • 時刻(と時差) • 日時 • 時間間隔 •
反復時間間隔 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
記法 • 基本形式と拡張形式 • 基本形式: 20201223200000 • 拡張形式: 2020-12-23T20:00:00 •
完全表記と省略表記 • 完全表記: 2020-12-23 (2020年12月23日) • 上位省略: --12-23 (ある年の月日) • 下位省略: 2020-12 (特定の月) • 代用形式 • 拡大表記 5 TODAY TODAY
日付 • 暦日付(年月日): 2020-12-23 • 年間通算日(年と年日): 2020-358 • 暦週日付(年と年週と週日): 2020-W52-3
6
時刻 • 地方時: 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
日時 • 2020-12-23T20:00:00 • 2020-358T20:00:00 • 2020-W52-3T20:00:00 • 2020-12-23T20:00:00+09:00 •
2020-12-23T11:00:00Z 8
時間間隔 • 経過時間 • 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
反復時間間隔 • 反復回数+経過時間 • 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
11 ソフトウェア設計への活用
1. よくみるオレオレ連携仕様の改善 12 { "id": "00000042", "createdAt": "2020/12/23 20:00:00" }
{ "id": "00000042", "createdAt": "2020-12-23T11:00:00Z" }
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
2. 曜日の数値表現 14 ݄ Ր ਫ ۚ
0 1 2 3 4 5 6 1 2 3 4 5 6 7 2 3 4 5 6 7 1
2. 曜日の数値表現 15 ং ໊༵ 01 ݄༵ 02 Ր༵ 03
ਫ༵ 04 ༵ 05 ༵ۚ 06 ༵ 07 ༵ cf) JIS X 0301:2002 4.3.2.2 ྺि
注意事項 • 標準規格が絶対ではない • 形式や表記の種類が多いので,全部対応は現実的ではない • 標準規格を参考にしつつも,情報交換当事者間で調整し合意することが必要 • 基本形式,拡張形式,完全形,省略表記 •
小数精度 • エンコード • ISO 8601が定義するのは文字列の表現のみで, エンコードは別途取り決めが必要 • etc 16
まとめ • 情報交換における時間の文字列表現は,ISO8601を 参考に設計しよう • 日付 • 日時 • 時間間隔
• 反復時間間隔 17
おまけ 18 ぼくの冬休み 2020-12-25T18:00:00+09:00/2021-01-05T09:30:00+09:00
19 Appendix
補足 • 拡大表記 • 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
日本向けの拡張(JIS X 0301) • 元号表記: R02.12.23 • あんまり使わないほうがよいと思う・・・(私見) • R(令和)が出たことで反復時間間隔の指示記号と混同する
• 基本形式が YY.MM.DD なので,異なる元号の年が 同じ表現になる(たぶん) • 人向けの表現にはよいけど,データ交換用には不適当かも 21
年月日のセパレータの違い • "/" は一般的によく使われているが, ロケールにより年月日の順番が違うので混乱を招く恐れがある • ISO8601では "-" が基本 •
"/" は時間間隔と反復時間間隔の要素セパレータ 22
規格書の参照 • ISOは有料 • JISは無料ユーザ登録で閲覧のみ可能(DLや印刷は不可) • 今回はJIS X 0301にISO 8601の翻訳が含まれていたので,
JISを参照した • JIS X 0301 「情報交換のためのデータ要素及び交換形式ー 日付及び時刻の表記」 23
refs • ISO 8601 - Wikipedia • https://ja.wikipedia.org/wiki/ ISO_8601#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8 %80%E8%AA%9E%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A3%85
• Date format by country - Wikipedia • https://en.wikipedia.org/wiki/Date_format_by_country 24