#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本