目次
Weekday関数を使って日時から曜日を取得する
time型の日時から曜日を取得するには、time型の値に続けてWeekday()と記述するだけです。
変数 := time型の値
変数.Weekday() // これで曜日が取得できる
例えば現在日時の曜日を取得する場合、次のように書けばできます。
today := time.Now()
DayOfWeek := today.Weekday()
fmt.Println(today) // 2021-12-09 23:20:01.597575 +0900 JST m=+0.011936838
fmt.Println(DayOfWeek) // Monday
特定の曜日かどうかをチェックしたい場合
例えば、現在日時が月曜日だったら「YES」、月曜日でなかったら「NO」を出力するとしたら以下のようなコードが書けます。
today := time.Now() // 現在日時の取得
DayOfWeek := today.Weekday() // 曜日の取得
if DayOfWeek == time.Monday { // 曜日が月曜であるかチェック
fmt.Println("YES")
} else {
fmt.Println("NO")
}
Golangでは上記のように、「time.曜日」とすることで曜日を取得することができます。
timeパッケージには曜日を表す定数がある
timeパッケージには、「月, 火, 水, 木, 金, 土, 日」の各曜日を表す定数が存在し、それぞれに番号が振り分けられてます。
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
iotaは連番という意味なので、実際は以下のコードと同じ意味になります。
const (
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
)
そのため、曜日を数値で表すことも可能です。
today := time.Now() // 現在日時の取得
DayOfWeek := today.Weekday() // 曜日の取得
if DayOfWeek == 1 { // 曜日が月曜であるかチェック
fmt.Println("YES")
} else {
fmt.Println("NO")
}
前の例では、月曜日をtime.Mondayと表してましたが、time.Mondayは定数Mondayであり、定数Mondayは数値の1が格納されているため、上記のような書き方ができるわけです。
time.Weekday().String()で曜日を文字列で取得できる
もし日時から曜日を取得する時、Weekday型の定数ではなく「”Sunday”」や「”Monday”」等のように文字列で取得したい場合は、time.Weekday().String()という書き方をすれば大丈夫です。
today := time.Now()
DayOfWeekString := today.Weekday().String()
fmt.Println(today) // 2021-12-09 23:20:01.597575 +0900 JST m=+0.011936838
fmt.Println(DayOfWeekString) // Monday(文字列)
Golangでは曜日を定数としても扱えるし、数値・文字列としても扱えることができ、必要に応じて変えられるので便利ですね。