Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
time.Now() / Sleep() / Format()
Goの『time』パッケージを使うと現在時刻の取得・プログラムの一時停止・時刻のフォーマットなどを行えます。『time.Now()』で現在時刻を、『time.Sleep()』で指定時間だけ処理を止めることができます。
構文
import "time"
// 現在時刻を取得します(ローカルタイムゾーン)。
t := time.Now()
// 指定した期間だけ処理を停止します。
time.Sleep(2 * time.Second)
time.Sleep(500 * time.Millisecond)
// 時刻を指定フォーマットの文字列に変換します。
s := t.Format("2006-01-02 15:04:05") // Goのリファレンス時刻を使います。
// 文字列から時刻を解析します。
t2, err := time.Parse("2006-01-02", "2026-03-05")
// 時刻の加減算を行います。
tomorrow := t.Add(24 * time.Hour)
yesterday := t.Add(-24 * time.Hour)
関数・メソッド一覧
| 関数/メソッド | 概要 |
|---|---|
| time.Now() | 現在のローカル時刻を返します。 |
| time.Sleep(d) | 指定した期間(Duration)だけ現在のgoroutineを停止します。 |
| t.Format(layout) | 時刻を指定したレイアウト文字列に変換して返します。 |
| time.Parse(layout, s) | レイアウトに従って文字列を解析しTime型を返します。 |
| t.Add(d) | 時刻にDurationを加算した新しいTime値を返します。 |
| t.Sub(u) | 2つのTime値の差をDurationで返します。 |
| t.Before(u) / t.After(u) | 時刻の前後を比較してboolを返します。 |
| t.Year() / Month() / Day() | 年・月・日を取得します。 |
| t.Hour() / Minute() / Second() | 時・分・秒を取得します。 |
| t.Unix() | Unixタイムスタンプ(秒)を返します。 |
| time.Since(t) | tから現在までの経過時間をDurationで返します。 |
サンプルコード
package main
import (
"fmt"
"time"
)
func main() {
// 現在時刻の取得と各フィールドの取り出しです。
now := time.Now()
fmt.Println("現在時刻:", now)
fmt.Printf("年=%d 月=%d 日=%d\n", now.Year(), now.Month(), now.Day())
fmt.Printf("時=%d 分=%d 秒=%d\n", now.Hour(), now.Minute(), now.Second())
fmt.Println("Unixタイムスタンプ:", now.Unix())
fmt.Println()
// Formatでの書式化です。Goのリファレンス時刻「2006-01-02 15:04:05」を使います。
fmt.Println("yyyy/MM/dd形式:", now.Format("2006/01/02"))
fmt.Println("日時形式:", now.Format("2006-01-02 15:04:05"))
fmt.Println("日本語形式:", now.Format("2006年1月2日 15時04分"))
fmt.Println("RFC3339形式:", now.Format(time.RFC3339))
fmt.Println()
// 時刻の加減算です。
tomorrow := now.Add(24 * time.Hour)
fmt.Println("明日:", tomorrow.Format("2006-01-02"))
nextWeek := now.Add(7 * 24 * time.Hour)
fmt.Println("来週:", nextWeek.Format("2006-01-02"))
fmt.Println()
// 処理時間の計測です。
start := time.Now()
time.Sleep(100 * time.Millisecond) // 100ms待機します。
elapsed := time.Since(start)
fmt.Println("処理時間:", elapsed)
fmt.Println()
// 文字列から時刻を解析します。
t, err := time.Parse("2006-01-02", "2026-03-05")
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println("解析した日付:", t.Format("2006年1月2日"))
// 2つの時刻の差を計算します。
diff := tomorrow.Sub(now)
fmt.Printf("nowからtomorrowまで: %.0f時間\n", diff.Hours())
}
概要
Goの時刻フォーマットには独自のリファレンス時刻(2006年1月2日15時04分05秒)を使います。他の言語の『%Y-%m-%d』のようなプレースホルダーではなく、この特定の日時をそのまま目的のフォーマットに当てはめて記述します。例えば『"2006/01/02"』と書けば「年/月/日」形式になります。
『time.Duration』は時間の長さを表す型で、『time.Second』『time.Millisecond』などの定数と掛け算で使います。例えば2秒は『2 * time.Second』と書きます。
time.Sleep()はgoroutineをブロックします。サーバーなど並行処理が必要な場面ではtime.Afterやtime.Tickerの使用を検討してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。