Pythonで曜日を取得する方法
Pythonで曜日を取得する方法について調べたので、備忘録としてのまとめです。
以下、参考にしたページです。
大きく分けると2通りの方法があるようです。
-
datetimeモジュールのstrftime()メソッドを使う方法 -
datetimeモジュールのweekday()メソッドとcalendarモジュールのday_nameを使う方法
それぞれ詳しく見ていきます。
datetimeモジュールのstrftime()メソッドを使う方法
datetimeモジュールの**strftime()**はdate型またはdatetime型のオブジェクトを文字列型に変換・フォーマットするためのメソッド。
引数に変換したいフォーマットを渡すと、文字列に変換してくれる。
%〇は書式化コードと呼ばれるもので、ここに年や月、分、曜日などを埋め込むことができる。
曜日の書式化コードは次のようになっている。
-
%A: 曜日名 -
%a: 曜日名(短縮形)
英語の曜日を取得
英語の曜日を取得したい場合は次のように簡単に取得できる。
import datetime as dt
date = dt.date(2001, 1, 2)
print(date.strftime('%Y-%m-%d')) # => '2001-01-02'
# 曜日を取得
print(date.strftime('%A')) # => 'Tuesday'
print(date.strftime('%a')) # => 'Tue'
日本語の曜日を取得
localeモジュールはPython上でロケールを確認したり変更したりするためのモジュールで、locale.setlocale()を使ってロケールを変更できる。ロケールを日本語環境に変更した後に上のコードと同じようにstrftime()を使えば日本語の曜日が取得できる。
import datetime as dt
import locale
# localeモジュールで時間のロケールを'ja_JP.UTF-8'に変更する
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
date = dt.date(2001, 1, 2)
print(date.strftime('%A')) # => '火曜日'
print(date.strftime('%a')) # => '火'
datetimeモジュールのweekday()メソッドとcalendarモジュールのday_nameを使う方法
datetimeモジュールのweekday()は曜日に対応する整数を返してくれる。月曜日が0始まりで日曜日が6で終わる。ちなみにdatetimeモジュールにはisoweekday()というメソッドもあるが、こちらは月曜日が1始まりで日曜日が7で終わる。
calenderモジュールのday_name()は曜日(英語)のcalendar._localized_dayというスライスできる型を返すのでweekday()とday_nameを組み合わせて曜日を取得できる。
import calendar
import datetime as dt
import locale
print((2001, 1, 2).weekday()) # => 1
print(calendar.day_name[:]) # => ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# localeモジュールで時間のロケールを'ja_JP.UTF-8'に変更する
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
print(calendar.day_name[:]) # => ['月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日', '日曜日']
英語の曜日を取得
先に述べたことを利用する。
import calendar
import datetime as dt
date = dt.date(2001, 1, 2)
# 曜日を取得
day_index = date.weekday() # => 1
print(calendar.day_name[day_index]) # => 'Tuesday'
日本語の曜日を取得
日本語で取得する場合はlocale.setlocale()を使ってロケールを変更する。
import calendar
import datetime as dt
import locale
# localeモジュールで時間のロケールを'ja_JP.UTF-8'に変更する
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
date = dt.date(2001, 1, 2)
# 曜日を取得
day_index = date.weekday() # => 1
print(calendar.day_name[day_index]) # => '火曜日'
注意点
どちらの方法でも良さそうだが、どちらともロケールを変更しているため(システムワイドではなく実行したコード内だけでの変更だが)、ロケールを変更したくない場合は、locale.setlocale()を使わずに英語の曜日から日本語の曜日に変換する関数を定義して使うと良さそう。