Go言語で日時を扱う方法

Go言語で日時を扱う方法

Go言語で日時を扱う方法について説明します。
Go言語では、標準ライブラリのtimeパッケージを使用して、日時の取得や操作を行うことができます。
以下に、基本的な使い方を説明します。

まず、timeパッケージをインポートします。

import "time"

現在の日時を取得する

現在の日時を取得するには、time.Now()関数を使用します。
この関数は、現在の日時を表すtime.Time型の値を返します。

now := time.Now()
fmt.Println("現在の日時:", now)

日時のフォーマット

time.Time型の値をフォーマットするには、Formatメソッドを使用します。
フォーマットには、標準のフォーマット文字列を使用します。
例えば、"2006-01-02 15:04:05"という文字列が標準フォーマットとなります。
この文字列は、実際のフォーマットを指定するための例として使います。

formattedTime := now.Format("2006-01-02 15:04:05")
fmt.Println("フォーマットされた日時:", formattedTime)

日時のパース

文字列からtime.Time型の値を生成するには、time.Parse関数を使用します。
time.Parse関数には、パースするフォーマットと、対象となる文字列を指定します。

layout := "2006-01-02 15:04:05"
dateString := "2024-08-27 13:45:00"
parsedTime, err := time.Parse(layout, dateString)
if err != nil {
  fmt.Println("パースエラー:", err)
} else {
  fmt.Println("パースされた日時:", parsedTime)
}

日時の計算

time.Time型の値に対して、日付の加算や減算を行うには、AddメソッドやSubメソッドを使用します。
Addメソッドには、time.Duration型の値を渡します。

// 1時間後の日時を計算
oneHourLater := now.Add(time.Hour)
fmt.Println("1時間後の日時:", oneHourLater)

// 1時間前の日時を計算
oneHourEarlier := now.Add(-time.Hour)
fmt.Println("1時間前の日時:", oneHourEarlier)

日時の差分を計算する

2つのtime.Time型の値の差分を計算するには、Subメソッドを使用します。
Subメソッドは、2つのtime.Time値の差をtime.Duration型で返します。

startTime := time.Date(2024, 8, 27, 12, 0, time.UTC, time.UTC, time.UTC)
endTime := time.Date(2024, 8, 27, 13, 0, time.UTC, time.UTC, time.UTC)
duration := endTime.Sub(startTime)
fmt.Println("時間の差分:", duration)

タイマーとTicker

Goでは、タイマーやTickerを使って定期的な処理や遅延処理を行うこともできます。
time.After関数は指定した時間後にチャネルにメッセージを送信します。

// 5秒後にメッセージを受信
select {
case <-time.After(5 * time.Second):
  fmt.Println("5秒が経過しました")
}

time.Tick関数は指定した間隔で定期的にチャネルにメッセージを送信します。

ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for tick := range ticker.C {
  fmt.Println("Tick at", tick)
}

これで、Go言語での日時の取り扱いの基本的な方法を説明しました。
Goのtimeパッケージを利用することで、日時の取得、フォーマット、パース、計算、タイマーやTickerの管理など、様々な日時関連の操作を簡単に行うことができます。