Goで現在時刻を表示してみたいと思います。
基本
まずは現在時刻を表示してみます。
package main
import (
"fmt"
"time"
)
func main() {
// 現在時刻
fmt.Println(time.Now()) // 2023-09-30 12:11:32.046565 +0900 JST m=+0.000120618
}
年月日と時刻が分かりますが、その他に難しそうな文字と数字がありますね。
現在日付時刻の表示
フォーマット
よく使うであろう日付の形式 YYYY-MM-DD HH::MM::SS で現在時刻を表示してみます。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now().Format(time.DateTime)) // 2023-09-30 12:23:22
fmt.Println(time.DateTime) // 2006-01-02 15:04:05
}
解説
Formatメソッドを使用すると現在時刻をフォーマットして表示できます。Formatメソッドには表示したい日付形式を指定します。
timeにはいくつかの定数が定義されていて、それらのいくつかは日付形式のフォーマットで使用できるようです。今回は time.DateTime を使用してみました。中身は 2006-01-02 15:04:05 になります。従って以下のようにフォマットを指定する事ができます。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // 2023-09-30 12:32:18
}
指定できる定数は公式ページを参照して下さい。
ロケーション
おそらく、ロケーションを指定しない場合、OSのロケーション(正確にはGoの実行環境)が使用されると予想します。
基本で表示した通り、ロケーションはJSTのようです。以下は現在時刻を表示した際の一部抜粋です。
+0900 JST
プログラムが実行される環境は様々です。何らかの理由があってOSのロケーションがUTCとしたい場合があったりします。そんな事もあるのでロケーションは指定すべき事項です。
それではロケーションを指定してみます。
package main
import (
"fmt"
"time"
)
func main() {
// JSTで表示する
jst, err := time.LoadLocation("Asia/Tokyo")
if err != nil {
panic(err)
}
fmt.Println(time.Now().In(jst)) // 2023-09-30 12:54:16.768134 +0900 JST
// UTCで表示する。
utc, err := time.LoadLocation("UTC")
if err != nil {
panic(err)
}
fmt.Println(time.Now().In(utc)) // 2023-09-30 03:54:16.768186 +0000 UTC
}
LoadLocationメソッドにタイムゾーンを指定します。Inメソッドにタイムゾーンを指定するようです。
フォーマットとロケーション
最後にフォーマットとロケーションを指定し現在時刻を表示します。
package main
import (
"fmt"
"time"
)
func main() {
// JSTで表示する
jst, err := time.LoadLocation("Asia/Tokyo")
if err != nil {
panic(err)
}
fmt.Println(time.Now().In(jst).Format(time.DateTime)) // 2023-09-30 13:01:29
// UTCで表示する。
utc, err := time.LoadLocation("UTC")
if err != nil {
panic(err)
}
fmt.Println(time.Now().In(utc).Format(time.DateTime)) // 2023-09-30 04:01:29
}
結果を見るとUTCはJST-9時間で表示されている事が分かります。
Time型
これまでに現在時刻を表示してみましたが、Goでは日付を主にTime型で扱う事に意識して下さい。time.Now()の戻り値は文字列ではありません。NowメソッドはTime型を返します。文字列として扱いたい場合、stringメソッドを使用します。
なお、Formatメソッドは文字列を返却するので文字列として扱える事に注意して下さい。
package main
import (
"fmt"
"reflect"
"time"
)
func main() {
fmt.Println(reflect.TypeOf(time.Now())) // time.Time
nowStr := time.Now().String()
fmt.Println(nowStr) // 2023-10-02 17:50:22.918421 +0900 JST m=+0.000082516
fmt.Println(reflect.TypeOf(nowStr)) // string
nowFmt := time.Now().Format(time.DateTime)
fmt.Println(nowFmt) // 2023-10-02 17:50:22
fmt.Println(reflect.TypeOf(nowFmt)) // string
}
最後に
特にありません。