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
260
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
130
JavaScriptのデバッグ/2023-09-04-llt30
ottijp
0
200
CDK for TerraformでAzureリソースをデプロイする/2023-05-15-llt29
ottijp
1
350
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
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
Foundry Localでエージェント開発
seosoft
0
170
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Security issues being discussed on Web Platforms
petamoriken
0
600
typoなんかねぇよ
raspython3
0
690
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
130
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
490
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
210
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
730
RailsConf 2023
tenderlove
30
1.5k
Designing for Timeless Needs
cassininazir
1
470
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
270
Optimizing for Happiness
mojombo
378
71k
New Earth Scene 8
popppiees
3
2.5k
Product Roadmaps are Hard
iamctodd
55
13k
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