Pythonで日付文字列から曜日を取得する方法を完全ガイド!初心者でもわかる日時処理入門
生徒
「Pythonで書かれた日付の文字列から曜日を調べたいんですが、やり方がわからなくて困っています。」
先生
「Pythonでは、日付を表す文字列をdatetimeに変換して、strftimeという機能を使うと曜日を取り出せますよ。」
生徒
「曜日の表し方って複数ありますよね?英語のフル綴りや短い綴りとか。」
先生
「その通りです。Pythonでは%Aや%aという記号を使い分けて簡単に取得できます。仕組みを順番に見ていきましょう。」
1. Pythonで日付文字列を曜日に変換する基本の流れ
Pythonで日付の文字列から曜日を取得するには、まず文字列を日付として扱える形に変換します。これはdatetime.strptimeという機能を使います。そのあとにstrftimeで曜日を取り出します。曜日を取り出すときに指定する%Aや%aは「書式指定子」と呼ばれ、曜日の出力形式を決める記号です。%Aは英語の曜日名のフル表記、%aは短縮表記になります。英語で出力されるのは国際的なルールに合わせた仕様です。
2. 日付文字列をdatetimeに変換する方法
日付を示す文字列はそのままでは曜日を取り出せません。そのため、まずdatetimeという日付を扱うための特別な型に変換します。これは「型変換」と呼ばれ、文字列を日付として理解してもらうための重要な手順です。次の例では「2025-01-15」という文字列を日付として読み取ります。
from datetime import datetime
date_text = "2025-01-15"
dt = datetime.strptime(date_text, "%Y-%m-%d")
print(dt)
上のコードでは%Yが年、%mが月、%dが日を表す書式です。この書式と日付の並びが一致すると、正しく変換できます。
3. strftimeで曜日を取り出す(%A と %a)
曜日を取り出すには、変換した日付に対してstrftimeを使います。大文字の%Aは完全な英語表記の曜日、小文字の%aは短縮表記になります。どちらもよく使われますが、APIなどでは短縮表記を使うこともあります。
from datetime import datetime
date_text = "2025-01-15"
dt = datetime.strptime(date_text, "%Y-%m-%d")
weekday_full = dt.strftime("%A")
weekday_short = dt.strftime("%a")
print(weekday_full)
print(weekday_short)
出力例:
Wednesday
Wed
英語で出てくるのはPythonが国際的な規格に合わせているためです。英語の曜日表記に慣れていない人でも、決まった意味を持つので覚えやすいでしょう。
4. よくあるつまずきと対処法
初心者が日付文字列から曜日を取得するときに混乱しやすいポイントをいくつか紹介します。まず、日付の書式が合っていないと、Pythonは正しい日付として読み取ることができません。例えば、文字列の形式が「2025/01/15」とスラッシュ区切りになっている場合は、strptimeの書式も同じ区切りにする必要があります。また、月や日が一桁の場合はゼロの有無にも注意が必要です。ゼロ埋めがないときは%mや%dではなく%-mのような指定が必要なこともあります。環境によっては動作が異なるため、自動化する場合は特に慎重に扱うと失敗しにくくなります。
5. いろいろな日付形式に対応する応用的な例
日付の書き方はひとつではありません。「2025年01月15日」のように日本語が含まれる書き方や、「01-15-2025」のように月が先に来る書き方もあります。Pythonでは、書式を工夫することでこれらの形式にも柔軟に対応できます。実務では外部システムから受け取ったデータの形式がばらばらなことも多いため、書式指定の理解は非常に役立ちます。特に業務システムでは日付の扱いが頻繁に出てくるため、曜日の取得が求められる場面も少なくありません。
from datetime import datetime
date_text = "2025年01月15日"
dt = datetime.strptime(date_text, "%Y年%m月%d日")
print(dt.strftime("%A"))
6. 曜日を日本語に変換するアイデア
Pythonでは曜日が英語で出力されますが、日本語に変換したい場合もあります。その場合は、自分で対応表を作る方法が簡単です。「Monday」を「月曜日」、「Tuesday」を「火曜日」というように辞書を作成して対応させるだけで実現できます。英語の曜日名と日本語の曜日名は固定なので、この方法は扱いやすく、初心者でも無理なく使えます。日本語で曜日を表示したいアプリやデータ出力に向いており、日常的な用途にも応用できます。
from datetime import datetime
weekday_map = {
"Monday": "月曜日",
"Tuesday": "火曜日",
"Wednesday": "水曜日",
"Thursday": "木曜日",
"Friday": "金曜日",
"Saturday": "土曜日",
"Sunday": "日曜日",
}
date_text = "2025-01-15"
dt = datetime.strptime(date_text, "%Y-%m-%d")
weekday_jp = weekday_map[dt.strftime("%A")]
print(weekday_jp)
出力例:
水曜日