🐍 Python
weekday() / isoweekday() で曜日を取得する
日付から曜日を番号で取得するメソッドが2つあります。weekday()は月曜を0とする番号、isoweekday()はISO 8601に準拠した月曜を1とする番号を返します。この起点のズレが混乱の元になりやすいポイントです。
d.weekday() # 月曜=0, 火=1, ... 日曜=6
d.isoweekday() # 月曜=1, 火=2, ... 日曜=7
d.strftime("%A") # 曜日名の文字列(ロケール依存)
from datetime import date
d = date(2026, 8, 10) # この日は月曜日
print(d.strftime("%A"))
# Monday
print(d.weekday())
# 0
print(d.isoweekday())
# 1
# calendar.day_nameで番号から曜日名(英語)を引ける
from datetime import date
import calendar
d = date(2026, 8, 10)
print(calendar.day_name[d.weekday()])
# Monday
# 日曜日の場合、weekday()とisoweekday()の差が最大になる
from datetime import date
d_sunday = date(2026, 8, 9)
print(d_sunday.weekday())
# 6
print(d_sunday.isoweekday())
# 7
2つのメソッドの起点
weekday()- 月曜=0から始まる(Pythonのリストのインデックスのように0始まり)
isoweekday()- 月曜=1から始まる(ISO 8601の曜日番号の定義に準拠)
💡 AIコードレビュー観点:「日曜=0」という思い込みに注意
多くのプログラミング言語やスプレッドシートでは「日曜=0、月曜=1、...」という並びが使われますが、Pythonのweekday()は「月曜=0」です。他言語からの移植コードや、AIが生成したコードで「土日判定」をweekday() in (0, 6)のように書いていたら、それは「月曜と日曜」を指しており、意図した「土曜と日曜」(weekday() in (5, 6))になっていない可能性があります。数値の意味を必ず確認しましょう。