【Golang】time.Weekday()で日時から曜日を取得する方法

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では曜日を定数としても扱えるし、数値・文字列としても扱えることができ、必要に応じて変えられるので便利ですね。

タイトルとURLをコピーしました