Pythonで曜日を取得する方法を解説!weekday()とisoweekday()の違いと使い方
生徒
「Pythonで“今日は何曜日?”って調べることってできますか?」
先生
「できますよ!Pythonではweekday()やisoweekday()という関数を使えば、今日の曜日を数字で取得できます。」
生徒
「数字って、月曜なら1とか日曜なら7とかですか?」
先生
「それはisoweekday()のパターンですね。実はweekday()とisoweekday()で少し違いがあるんです。順番に解説していきますね。」
1. Pythonで曜日を取得する方法とは?
Python(パイソン)で「今日は何曜日かな?」と調べたいときは、標準で用意されているdatetime(デイトタイム)という便利な道具箱(モジュール)を使います。この中にあるweekday()やisoweekday()という機能を使うのが一般的です。
プログラミングの世界では、曜日を「月曜日」という文字ではなく、「0」や「1」といった数字で扱うのが大きな特徴です。たとえば、カレンダーアプリやゴミ出しの通知システムを作る際、プログラム側で「もし数字が0(月曜)なら通知する」といった判断をさせるために非常に役立ちます。
「なぜわざわざ数字にするの?」と思うかもしれませんが、コンピューターにとっては文字よりも数字の方が「比較」や「計算」が得意だからです。
まずは、最もシンプルな「今日の曜日を数字で表示する」サンプルコードを見てみましょう。コピー&ペーストして実行するだけで、今の曜日が数字で出力されます。
# datetimeモジュールを読み込みます
from datetime import datetime
# 今日の日付情報を取得して「today」という変数に入れます
today = datetime.now()
# weekday()を使って、曜日を数字で表示します
print("今日の曜日の数字は:", today.weekday())
このように、わずか数行のコードで日付から曜日を割り出すことができます。月曜日を「0」から数え始めるのか、それとも「1」から数え始めるのかによって使う関数が変わりますので、その具体的な違いを次の章から詳しく見ていきましょう。
2. weekday()の使い方と特徴:数字で曜日を判定する
Pythonで「今日は何曜日かな?」を調べたいときに最もよく使われるのが、weekday()という機能です。この関数を使うと、実行した日の曜日を「0から6の数字」として受け取ることができます。
プログラミングの世界では、数は1ではなく0から数え始めることが多いため、最初は少し戸惑うかもしれません。「0=月曜日」からスタートし、「6=日曜日」で終わるというルールを覚えておきましょう。
【基本コード】今日の曜日を数字で取得する
from datetime import datetime
# 今日の日付・時刻の情報を取得
today = datetime.today()
# 曜日を数字(0〜6)で取得
w_number = today.weekday()
print(f"今日の曜日の数字は: {w_number}")
例えば、実行結果が「2」と表示された場合は「水曜日」を指しています。初心者の方は、以下の対応表を見ながらコードを書くとスムーズです。
| 数字 | 対応する曜日 | 覚え方のヒント |
|---|---|---|
| 0 | 月曜日 | 週の始まりは0から |
| 1 | 火曜日 | |
| 2 | 水曜日 | |
| 3 | 木曜日 | 折り返しの3 |
| 4 | 金曜日 | |
| 5 | 土曜日 | 休日の入り口 |
| 6 | 日曜日 | 週の終わり |
このweekday()は、「土日だったら処理を休む」「月曜日なら特定のメッセージを出す」といった、条件によってプログラムの動きを変えたいときに非常に便利です。数字で返ってくるので、コンピューターにとっても判定しやすい形式なのです。
3. isoweekday()の使い方と曜日判定のコツ
Pythonで日付を扱う際、weekday()と並んでよく使われるのがisoweekday()メソッドです。最大の特徴は、国際規格(ISO 8601)に基づいた「直感的な数字」で曜日を返してくれる点にあります。
このメソッドでは、曜日を1〜7の範囲で表し、1が月曜日、7が日曜日と定義されています。「月曜日=1」から始まるため、プログラミングに慣れていない方でもカレンダーのイメージ通りに理解しやすいのがメリットです。
from datetime import datetime
# 現在の日時を取得
today = datetime.today()
# ISO方式で曜日を数字で取得(1:月〜7:日)
yo_bi_num = today.isoweekday()
print(f"今日は {yo_bi_num} 番目の曜日です")
例えば、実行結果が「3」であれば水曜日を指します。もし週末(土日)かどうかを判定したい場合は、if today.isoweekday() >= 6: と記述するだけで済むため、コードの可読性も高まります。
注意点: weekday()は「0〜6(0が月曜)」ですが、isoweekday()は「1〜7(1が月曜)」です。日曜日が「0」ではなく「7」になるため、条件分岐を作る際はどちらのメソッドを使っているか必ず確認しましょう。
4. weekday()とisoweekday()の違い:どっちを使うべき?
Pythonで曜日を扱う際、もっとも混乱しやすいのが「戻り値(数値)の違い」です。特にプログラミング未経験の方にとって、月曜日が「0」から始まるか「1」から始まるかは、バグを生む大きな原因になります。2つのメソッドの違いを整理しましょう。
| 曜日 | weekday() (Python標準) |
isoweekday() (ISO 8601準拠) |
|---|---|---|
| 月曜日 | 0 | 1 |
| 火曜日 | 1 | 2 |
| 水曜日 | 2 | 3 |
| 木曜日 | 3 | 4 |
| 金曜日 | 4 | 5 |
| 土曜日 | 5 | 6 |
| 日曜日 | 6 | 7 |
どちらを使うべきかの判断基準
基本的には、国際規格であるisoweekday()の方が直感的でおすすめです。なぜなら、「1=月曜日、7=日曜日」というルールは、カレンダーの感覚と一致しやすいためです。
一方で、リスト(配列)を使って曜日名を管理する場合は、0番目から数え始めるweekday()を使うと、プログラムがシンプルに書けるというメリットがあります。
初心者が試せる簡単サンプルコード
実際に、今日が何曜日なのかを数値で確認してみましょう。以下のコードをコピーして実行してみてください。
from datetime import datetime
# 今日の日付を取得
today = datetime.now()
# weekday()の場合:月曜日が0
print(f"weekdayの結果: {today.weekday()}")
# isoweekday()の場合:月曜日が1
print(f"isoweekdayの結果: {today.isoweekday()}")
# 【応用】リストと組み合わせて曜日名を表示する(weekdayが便利)
weeks = ["月", "火", "水", "木", "金", "土", "日"]
index = today.weekday()
print(f"今日は{weeks[index]}曜日です!")
ポイント: weekday()は「0」から数え始めるので、リストのインデックス番号とそのまま一致します。そのため、上記サンプルのように「曜日名」を取り出したいときによく使われます。
5. 今日の曜日を日本語で表示したいとき(リストの活用)
Pythonで日付を扱う際、数字だけでは直感的に分かりにくいものです。「0」や「1」ではなく、「月曜日」や「火曜日」といった日本語で表示したい場面は多いですよね。そんな時は、あらかじめ「曜日の名前が入ったリスト(配列)」を準備しておくのが一番シンプルで確実な方法です。
プログラミング未経験の方でも分かりやすいように、リストを使った具体的な手順を見ていきましょう。today.weekday()が返す「0から6の数字」を、自作したリストの「並び順」に当てはめて呼び出す仕組みです。
import datetime
# 1. 曜日のリストを作成(0番目が月曜日、6番目が日曜日)
week_list = ["月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日"]
# 2. 今日の日付情報を取得
today = datetime.datetime.today()
# 3. weekday()で取得した数字(0〜6)をリストの添え字として使う
day_index = today.weekday()
kanji_day = week_list[day_index]
print("今日は " + kanji_day + " です")
今日は 水曜日 です
このコードのポイントは、Pythonのリストが「0番目」から数え始めるという点です。weekday()メソッドは月曜日を「0」、火曜日を「1」……日曜日を「6」として返してくれるため、リストの並び順とピッタリ一致します。このテクニックを覚えれば、日本語だけでなく「(月)」「Monday」など、自由な形式で曜日を出力できるようになりますよ。
6. 未来や過去の日付の曜日も取得できる
曜日を調べるのは「今日」だけとは限りません。「来週の金曜日は何曜日?」とか「1ヶ月前の曜日は?」など、他の日付に対しても曜日の取得ができます。
from datetime import timedelta
next_week = datetime.today() + timedelta(days=7)
print("来週の曜日(数字):", next_week.weekday())
print("来週の曜日(日本語):", week_list[next_week.weekday()])
来週の曜日(数字): 2
来週の曜日(日本語): 水曜日
timedeltaと組み合わせることで、好きな日付の曜日を調べることができます。
7. 初心者のための補足:曜日を数字で扱う理由とは?
なぜ曜日を「月曜日」や「火曜日」ではなく、数字で扱うのか疑問に思うかもしれません。
それは、プログラムの中では「文字」より「数字」のほうが比較や計算がしやすいからです。たとえば「月曜日から金曜日までの範囲かどうか」を調べるとき、数字であれば次のように簡単に書けます:
if today.weekday() < 5:
print("平日です")
else:
print("週末です")
平日です
このように、weekday()で得た数字を使うことで、曜日による条件分岐が簡単にできるのです。
8. 曜日を使ったアプリ例:予定表やリマインダー
曜日の情報は、日々の予定管理アプリや、タスクリマインダーを作るときにとても役立ちます。たとえば:
- 「金曜日に週報を自動で送信」
- 「月曜日にToDoをリセット」
- 「土日は通知をオフ」
このような処理を作るには、weekday()やisoweekday()の知識が欠かせません。