Golangでtime.Time型を文字列として扱う方法
日付や時刻を表すtime.Time型を文字列型に変換するには、timeパッケージのString()関数を使用します。
文字列型 := time.Time型.String()
構文は上記の通りで、とてもシンプル。
具体的なコード例
例えば現在時刻を文字列として取得する場合以下のようになります。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now() // 現在時刻
stringT := t.String() // 現在時刻の文字列を取得
fmt.Println(t)
fmt.Println(stringT)
fmt.Printf("%+T\n", t) // 変数tのデータ型
fmt.Printf("%+T\n", stringT) // 変数stringTのデータ型
}
実行結果はこのようになります。
2022-04-04 11:25:12.85767 +0900 JST m=+0.000059609
2022-04-04 11:25:12.85767 +0900 JST m=+0.000059609
time.Time
string
時刻の表示は変数tも変数stringTも変わりありませんが、データ型を確認してみるとtはtime.Time型で、stringTは文字列型になっていることが分かりますね。
年・月・日だけを文字列として取得したい場合
例えば以下の日時から、
2022-04-04 11:25:12.85767 +0900 JST m=+0.000059609
日付の部分だけ(2022-04-04)を文字列として取得するには、timeパッケージのFormat()関数を使用すれば可能です。
構文は以下の通りで、Format()関数を使用する場合は「年、月、日」の書式を引数に渡します。
const layout = "2006-01-02"
s := time.Format(layout)
具体的なコード例
例えば現在時刻の日付の部分だけを文字列として取得する場合は、以下のようになります。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
const layout = "2006-01-02"
s := t.Format(layout)
fmt.Println(t) // 2022-04-04 11:39:00.722777 +0900 JST m=+0.000076258
fmt.Println(s) // 2022-04-04
}
もし、「YYYY-MM-DD」ではなくスラッシュで区切る「YYYY/MM/DD」としたいならFormat()関数に渡す書式をそのように変えてあげればOKです。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
const layout = "2006/01/02"
s := t.Format(layout)
fmt.Println(t) // 2022-04-04 11:39:00.722777 +0900 JST m=+0.000076258
fmt.Println(s) // 2022/04/04
}