#18 Goで学ぶ日付と時刻の扱いの基本
Goの日付操作は、標準ライブラリの`time`パッケージだけで、かなり多くのことができます。この記事では、Goにおける日付と時刻の基本的な扱い方と、他言語の経験者ほど戸惑いやすい書式指定のクセを解説します。
timeパッケージを使う
now := time.Now()
fmt.Println(now)
UTC(協定世界時)で扱いたい場合は`now.UTC()`を使います。
日付を文字列にする
Goの日付の書式指定は、他の言語のような`%Y`のような記号ではなく、「基準となる日時」を使った独特な書き方をします。
fmt.Println(now.Format("2006年01月02日"))
fmt.Println(now.Format("15:04:05"))
この「2006年1月2日15時4分5秒」は、Goの基準日として決められた特別な日時です。年は`06`または`2006`、月は`01`、日は`02`、時は`15`(24時間表記)、分は`04`、秒は`05`という数字自体に意味があり、この数字パターンを書式指定の中で使うことで、対応する部分がその形式に置き換わります。
文字列から日付に変換する
逆に文字列を`time.Time`型に変換したい場合は`time.Parse`を使います。こちらも基準日時と同じ書式を指定します。
t, err := time.Parse("2006-01-02", "2026-08-18")
if err != nil {
// エラー処理
}
fmt.Println(t)
Goらしく、変換に失敗する可能性のある処理は戻り値の2つ目に`error`を返す形になっているため、`err`が`nil`かどうかを必ず確認する習慣をつけましょう。
日付を計算する
threeDaysLater := now.Add(3 * 24 * time.Hour)
nextMonth := now.AddDate(0, 1, 0)
時間・分・秒単位の計算には`Add`、年・月・日単位の計算には`AddDate(年, 月, 日)`を使うのがGoの流儀です。月末をまたぐ計算など、暦の扱いが絡む場合は`AddDate`を使うようにしましょう。
Goならではの注意点
Goの日付の書式指定は、他の言語の経験があるとかえって混乱しやすいポイントです。PythonやRubyの`%Y-%m-%d`のような記号ベースの指定に慣れていると、なぜGoだけ「2006-01-02」という具体的な日付を書くのか戸惑うかもしれません。この基準日時「2006-01-02 15:04:05」(米国式の表記で1,2,3,4,5,6,7の順に並ぶよう設計されている)さえ覚えてしまえば、あとは同じパターンで様々な形式を指定できます。
まとめ
Goの日付操作は`time`パッケージが基本で、独特な書式指定に慣れることが重要です。文字列との変換には`Format`と`Parse`、計算には`Add`と`AddDate`を使い分け、基準日時「2006-01-02 15:04:05」を覚えておきましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Goをもっと学びたい方には「Go言語入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿