Goの日時フォーマットあれこれ

# はじめに
Goの日付フォーマット、時間フォーマットは他の言語と比べてユニークです。覚えるまでに少し時間がかかります。なので、ここでまとめてみました。

## 年
| 文字 | 解説 |出力例|
|:-|:-|:-|
|2006|4桁の年|2000, 2022|
|06|下2桁の年|00, 22|

~~~go
// 2022年の場合
fmt.Println(time.Now().Format(`2006`)) // 2022
fmt.Println(time.Now().Format(`06`)) // 22
~~~

## 月
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|2|1桁または2桁の数字|1, 2, ..., 10, 11, 12|
|_2|1桁または2桁の数字。先頭は半角スペース埋め|1, 2, ..., 10, 11, 12|
|02|2桁の数字。先頭は0埋め|01, 02, ..., 10, 11, 12|
|Jan|省略した月名。大文字小文字を区別する。| Jan, Feb, ..., Nov, Dec|
|January|フルテキストの月名。大文字小文字を区別する。| January, February, ..., November, December|

~~~go
// 3月の場合
fmt.Println(time.Now().Format(`2`)) // 3
fmt.Println(time.Now().Format(`_2`)) //  3
fmt.Println(time.Now().Format(`02`)) // 03
fmt.Println(time.Now().Format(`Jan`)) // Mar
fmt.Println(time.Now().Format(`January`)) // March
~~~

## 日
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|3|1桁または2桁の数字|1, 2, ..., 30, 31|
|_3|1桁または2桁の数字。先頭は半角スペース埋め|1, 2, ..., 30, 31|
|03|2桁の数字。先頭は0埋め|01, 02, ..., 30, 31|
~~~go
// 5日の場合
fmt.Println(time.Now().Format(`3`)) // 5
fmt.Println(time.Now().Format(`_3`)) //  5
fmt.Println(time.Now().Format(`03`)) // 05
~~~

## 曜日
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|Mon|省略した曜日名|Mon, Tue, ..., Sat, Sun|
|Monday|フルテキストの曜日名|Monday, Tuesday, ..., Saturday, Sunday|
~~~go
// 2022年2月1日(火)の場合
fmt.Println(time.Now().Format(`Mon`)) // Tue
fmt.Println(time.Now().Format(`Monday`)) // Tuesday
~~~

## 日数
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|__2|元日からの日数。先頭は半角スペース埋め。|1, 2, ..., 364, 365|
|002|元日からの日数。先頭は0埋め。|001, 002, ..., 364, 365|
~~~go
// 2022年2月1日(火)の場合
fmt.Println(time.Now().Format(`__2`)) //  32
fmt.Println(time.Now().Format(`002`)) // 032
~~~

## 時
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|3|12時間表記の数字|1, 2, ..., 11, 12|
|03|12時間表記の数字。先頭は0埋め。|01, 02, ..., 11, 12|
|15|24時間表記の数字。先頭は0埋め。|00, 01, ..., 22, 23|
~~~go
// 現在時刻が午後4時の場合
fmt.Println(time.Now().Format(`3`)) // 4
fmt.Println(time.Now().Format(`03`)) // 04
fmt.Println(time.Now().Format(`15`)) // 16
~~~

## 分
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|4|1桁または2桁の数字|0, 1, ..., 58, 59|
|04|2桁の数字。先頭は0埋め。|00, 01, ..., 58, 59|
~~~go
// 現在時刻が9分の場合
fmt.Println(time.Now().Format(`4`)) // 9
fmt.Println(time.Now().Format(`04`)) // 09
~~~

## 秒
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|5|1桁または2桁の数字|0, 1, ..., 58, 59|
|05|2桁の数字。先頭は0埋め。|00, 01, ..., 58, 59|
~~~go
// 現在時刻が9秒の場合
fmt.Println(time.Now().Format(`5`)) // 9
fmt.Println(time.Now().Format(`05`)) // 09
~~~

## ミリ秒以下
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|.0<br/>.000000000|0の数で桁数(1～9)が変わる。桁数は0の数と同じ。|000000000, ..., 999999999|
|.9<br/>.999999999|9の数で桁数(1～9)が変わる。桁数は9の数と同じだが、最小位の0は省略される。|0, ..., , 999999999|
~~~go
// 現在時刻の小数点以下が0.071581420秒の場合
fmt.Println(time.Now().Format(`.0`))         // .0
fmt.Println(time.Now().Format(`.000000000`)) // .071581420
fmt.Println(time.Now().Format(`.9`))         // 空文字
fmt.Println(time.Now().Format(`.999999999`)) // .07158142
~~~

## 午前 / 午後
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|pm|午前または午後の英語表記。小文字。|am, pm|
|PM|午前または午後の英語表記。大文字。|AM, PM|
~~~go
// 現在時刻が午前の場合
fmt.Println(time.Now().Format(`pm`)) // am
fmt.Println(time.Now().Format(`PM`)) // AM
~~~

## タイムゾーン
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|MST|タイムゾーンの3文字表記|UTC, JST etc|
~~~go
// タイムゾーンが日本の場合
fmt.Println(time.Now().Format(`MST`)) // JST
~~~

## オフセット
| 文字 | 解説 | 出力例 |
|:-|:-|:-|
|-07:00|UTCからのオフセット|+09:00, +00:00, -01:00 etc|
|-0700|UTCからのオフセット|+0900, +0000, -0100 etc|
|-07|UTCからのオフセット|+09, +00, -01 etc|
|Z07:00|UTCからのオフセット。オフセットがない場合はZと表示|+09:00, Z, -01:00 etc|
|Z0700|UTCからのオフセット。オフセットがない場合はZと表示|+0900, Z, -0100 etc|
|Z07|UTCからのオフセット。オフセットがない場合はZと表示|+09, Z, -01 etc|
~~~go
// タイムゾーンが日本の場合
fmt.Println(time.Now().Format(`-07:00`)) // +09:00
fmt.Println(time.Now().Format(`-0700`))  // +0900
fmt.Println(time.Now().Format(`-07`))    // +09
fmt.Println(time.Now().Format(`Z07:00`)) // +09:00
fmt.Println(time.Now().Format(`Z0700`))  // +0900
fmt.Println(time.Now().Format(`Z07`))    // +09
~~~