Pythonで曜日を取得する

Pythonで指定した日付の曜日を取得してみます。

目次

  1. dateオブジェクト
  2. strftimeで曜日を表示する
  3. datetimeオブジェクトのメソッドで曜日を調べる
  4. 次の〇曜日の日付を調べる
  5. 〇週目の〇曜日の日付を調べる

dateオブジェクト

datetimeモジュールを使って曜日を取得します。

まずはatetimeオブジェクトを作ります。

>>> import datetime
>>> a = datetime.datetime.strptime('2019/1/1', '%Y/%m/%d')
>>> a
datetime.datetime(2019, 1, 1, 0, 0)

2019年1月1日は火曜日です。

strftimeで曜日を表示する

strftimeメソッドでdatetimeオブジェクトを文字列に変換する際に、曜日を出力するように指定します。

>>> import datetime
>>> a = datetime.datetime.strptime('2019/1/1', '%Y/%m/%d')
>>> a.strftime('%a')
'Tue'
>>> a.strftime('%A')
'Tuesday'
>>> a.strftime('%w')
'2'
ディレクティブ 内容
%a 曜日名を短縮形で表示します。
%A 曜日名を表示します。
%w 日曜日を0、土曜日を6として、曜日を数字文字で表示します。

曜日名の表記の仕方は、ロケールによって変わります。上記の例はja_JPです。

datetimeオブジェクトのメソッドで曜日を調べる

調べた結果が整数の方が何かと使い勝手が良いので、datetimeオブジェクトのメソッドを使って曜日を調べてみます。

>>> import datetime
>>> a = datetime.datetime.strptime('2019/1/1', '%Y/%m/%d')
>>> a.weekday()
1
>>> a.isoweekday()
2
>>> a.isocalendar()
(2019, 1, 2)
ret1 = datetime.weekday()
ret2 = datetime.isoweekday()
ret3 = datetime.isocalendar()
変数 内容
ret1 int weekday()は、月曜日を0、日曜日を6として、曜日を整数で返します。
ret2 int isoweekday()は、月曜日を1、日曜日を7として、曜日を整数で返します。
ret3 tuple isocalendar()は、ISO年、ISO週番号、ISO曜日のタプルを返します。

次の〇曜日の日付を調べる

datetimeモジュールを使って、次の〇曜日の日付を調べてみます。

import datetime

a = datetime.datetime.strptime('2019/1/1', '%Y/%m/%d')

current_weekday = a.weekday()
target_weekday = 0  # 0:月曜日 1:火曜日 ... 6:日曜日

if current_weekday < target_weekday:
    diff = target_weekday - current_weekday
else:
    diff = target_weekday - current_weekday + 7
diff_days = datetime.timedelta(days=diff)

b = a + diff_days

print(b.strftime('%Y-%m-%d %A'))

出力

2019-01-07 Monday

〇週目の〇曜日の日付を調べる

calendarモジュールを使って、〇週目の〇曜日を調べてみます。ゴミ回収日などによくある設定ですね。

import calendar
import datetime

cal = calendar.Calendar()

YEAR = 2019
MONTH = 1

target_weekday = 1  # 0:月曜日 1:火曜日 ... 6:日曜日
target_weeknum = -1  # 0:第1週 1:第2週 ... -1:最終週
days = []
for i in cal.itermonthdays2(YEAR, MONTH):
    if i[0] > 0 and i[1] == target_weekday:
        days.append(i)

d = datetime.date(YEAR, MONTH, days[target_weeknum][0])
print(d.strftime('%Y-%m-%d %A'))

出力

2019-01-29 Tuesday

上記のコードの中のdaysという変数が、指定した曜日の(日付、曜日)というタプルのリストになります。このリストのインデックス0の項目が第1週目の指定曜日の日付になるわけです。インデックスに-1を指定すれば、指定曜日の最終の日付を取得できます。

広告

Pythonの日付/時刻処理カテゴリの投稿