Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ISO8601/2020-12-23-llt18
Search
Satoshi SAKAO
December 23, 2020
Programming
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ISO8601/2020-12-23-llt18
社内のLTイベント「えるLT Vol.18 オンライン」で発表した資料です
Satoshi SAKAO
December 23, 2020
More Decks by Satoshi SAKAO
See All by Satoshi SAKAO
Testcontainers/2024-11-20-llt32
ottijp
0
120
Pkl/2024-04-17-llt31
ottijp
0
140
JavaScriptのデバッグ/2023-09-04-llt30
ottijp
0
200
CDK for TerraformでAzureリソースをデプロイする/2023-05-15-llt29
ottijp
1
360
TWELITEへの誘い/2022-12-27-llt28
ottijp
0
190
ビルドツールBazelを触ってみた/2022-09-28-llt27
ottijp
0
230
HashiCorp Vaultを使ったシークレットのセキュアな一元管理 〜Ansibleを添えて〜/2022-07-12-llt26
ottijp
0
190
AWSインフラのデプロイをCDKでカイゼンする/2022-03-23-llt25
ottijp
0
130
Amazon Timestreamでデータ補間/2021-12-27-llt24
ottijp
0
130
Other Decks in Programming
See All in Programming
気持ちぃ〜角丸 Squircle
ryu1013
0
370
Seven New Principles of Software Engineering
yegor256
0
380
パスワード再設定メールのURLについて知っておこう
uyuki234
0
200
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
200
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
650
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
140
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7.1k
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.2k
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
230
AmebaブログはKMPから卒業します
kmars0605
0
310
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
310
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.4k
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
370
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Mind Mapping
helmedeiros
1
420
Become a Pro
speakerdeck
PRO
31
6.3k
The Curse of the Amulet
leimatthew05
3
16k
Designing for humans not robots
tammielis
254
26k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
550
Raft: Consensus for Rubyists
vanstee
143
7.8k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
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