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
28
Pkl/2024-04-17-llt31
ottijp
0
65
JavaScriptのデバッグ/2023-09-04-llt30
ottijp
0
130
CDK for TerraformでAzureリソースをデプロイする/2023-05-15-llt29
ottijp
1
210
TWELITEへの誘い/2022-12-27-llt28
ottijp
0
130
ビルドツールBazelを触ってみた/2022-09-28-llt27
ottijp
0
140
HashiCorp Vaultを使ったシークレットのセキュアな一元管理 〜Ansibleを添えて〜/2022-07-12-llt26
ottijp
0
130
AWSインフラのデプロイをCDKでカイゼンする/2022-03-23-llt25
ottijp
0
73
Amazon Timestreamでデータ補間/2021-12-27-llt24
ottijp
0
88
Other Decks in Programming
See All in Programming
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
170
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
9
1.8k
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
170
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.4k
Software Architecture
hschwentner
6
2.1k
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
2
570
AWS Organizations で実現する、 マルチ AWS アカウントのルートユーザー管理からの脱却
atpons
0
150
楽しく向き合う例外対応
okutsu
0
150
定理証明プラットフォーム lapisla.net
abap34
1
1.8k
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
190
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1k
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Documentation Writing (for coders)
carmenintech
67
4.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
Art, The Web, and Tiny UX
lynnandtonic
298
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Code Review Best Practice
trishagee
67
18k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
YesSQL, Process and Tooling at Scale
rocio
172
14k
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