Goの日時書式の話
by
株式会社イノベーション(エンジニア)
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Goの日時書式の話 2025.05 開発定例LT 蜂谷
Slide 2
Slide 2 text
Goの日時書式って特殊ですよね 2006-01-02 15:04:05
Slide 3
Slide 3 text
Goの日時書式は批判されがち https://ytyaru.hatenablog.com/entry/2022/10/31/000000
Slide 4
Slide 4 text
こうなっている理由はちゃんとある アメリカの慣例(Jan 1st 12:34:56 とか)に倣って `月-日 時:分:秒 年` の形式で 先頭から1,2,3…と番号を付けている。 分は12時間表記が `3` で24時間表記は `15`
Slide 5
Slide 5 text
ただし年月日の並び順の方が世界的に広く使われている 世界的に `年月日` の並びの方が広く使われていることを Go言語開発者のRob Pikeが知らなかったのでこの並びになった。 この仕様は誤りだったとメーリングリストで語ったらしい。 後方互換維持のため Go 1.x の間はこのまま
Slide 6
Slide 6 text
アルファベットで表す形式の方が他の言語には多い - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss
Slide 7
Slide 7 text
同じような書式が多いので経験が増えるほど迷う - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss %つけるんだっけ?
Slide 8
Slide 8 text
同じような書式が多いので経験が増えるほど迷う - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 月と分のmは大文字小文 字どっちだっけ?
Slide 9
Slide 9 text
同じような書式が多いので経験が増えるほど迷う - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 時は24ありだっけ?
Slide 10
Slide 10 text
同じような書式が多いので経験が増えるほど迷う - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 全体的に大文字小文字 どっちだっけ?
Slide 11
Slide 11 text
パターンが多いと辿り着くまで大変 - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 辿り着くまでに考えること 1. 年が4文字のパターン? 2. %つくパターン? 3. 時は24つく? 4. 分はiかmか?それともmi? 5. 大文字小文字どうだっけ?
Slide 12
Slide 12 text
パターンが多いと辿り着くまで大変 - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 辿り着くまでに考えること 1. 年が4文字のパターン? 2. %つくパターン? 3. 時は24つく? <- 全てのステップで?がつく 4. 分はiかmか?それともmi? 5. 大文字小文字どうだっけ?
Slide 13
Slide 13 text
パターンが多いと辿り着くまで大変 - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 辿り着くまでに考えること 1. 年が4文字のパターン? <- 実際はここの?で諦めてリファレンスをみる 2. %つくパターン? 3. 時は24つく? <- 全てのステップで?がつく 4. 分はiかmか?それともmi? 5. 大文字小文字どうだっけ?
Slide 14
Slide 14 text
パターンが多いと辿り着くまで大変 - PHP: Y-m-d H:i:s - MySQL: %Y-%m-%d %H:%i:%s - C: %Y-%m-%d %H:%M:%S - PostgreSQL: YYYY-MM-DD HH24:MI:SS - JavaScript: YYYY-MM-DD HH:mm:ss - SQLServer: yyyy-MM-dd HH:mm:ss 辿り着くまでに考えること 1. 年が4文字のパターン? 2. %つくパターン? <- この辺で考えるのを諦めてリファレンスをみる 3. 時は24つく? <- 全てのステップで?がつく 4. 分はiかmか?それともmi? 5. 大文字小文字どうだっけ? よく使われる設計だから使いやすいわけではない 同じような設計が増えると微妙な違いが増える
Slide 15
Slide 15 text
Goの日時書式はルールを覚えれば迷わない 2006-01-02 15:04:05 辿り着くまでに考えること 1. 数字を並べればOK 2. 月日時分秒年 の順で1から6まで 3. 時分秒をゼロ埋めするなら0をつけて2桁にする 4. 年は4桁で2006固定でOK 5. 時は24時間表示なら午後3時の15
Slide 16
Slide 16 text
Goの日時書式はルールを覚えれば迷わない 2006-01-02 15:04:05 辿り着くまでに考えること 1. 数字を並べればOK 2. 月日時分秒年 の順で1から6まで 3. ゼロ埋めするなら0をつけて2桁にする 4. 年は4桁で2006固定でOK 5. 時は24時間表示なら午後3時の15 ユニークかつルールが明確なので迷わない 万が一このパターンが増えてしまうと迷うようになる
Slide 17
Slide 17 text
標準ライブラリにいろんなパターンが定数定義されてます https://pkg.go.dev/time#pkg-constants
Slide 18
Slide 18 text
まとめ - Goの日時書式は一見変だけどちゃんと考えられているよ - よく使われるパターンは似たパターンが多いとむしろわかりづらくなる - 見慣れないからといって拒絶するのではなくなぜそうなのか調べると良い - 一貫した設計思想に基づいて実装ルールを徹底するのは認知負荷を下げる
Slide 19
Slide 19 text
おわり 以上です