Python

Pythonで日付操作(対象月の初日と最終日の取得など)

Python

Pythonで時刻の取得や加算や比較を行う方法について以前にメモしました。

今回はさらにもう少し具体的に、月の初日や最終日の取得などの方法についてもメモです。

月の初日の取得

# 月の初日を返す(1日)
def get_firstday_of_month(date):
    return date.replace(day=1)

月の最終日の取得

# 月の最終日を返す(28日 or 29日 or 30日 or 31日)
def get_lastday_of_month(date):
    return date.replace(day=calendar.monthrange(date.year, date.month)[1])

結果確認

それでは実際に実行してみます。

# 月の初日を返す(1日)
def get_firstday_of_month(date):
    return date.replace(day=1)

# 月の最終日を返す(28日 or 29日 or 30日 or 31日)
def get_lastday_of_month(date):
    return date.replace(day=calendar.monthrange(date.year, date.month)[1])

date_today = datetime.date.today()
print(date_today)
print(get_firstday_of_month(date_today))
print(get_lastday_of_month(date_today))

print("--------------------------------")
date_sample1 = datetime.date(2020, 1, 15)
print(date_sample1)
print(get_firstday_of_month(date_sample1))
print(get_lastday_of_month(date_sample1))

print("--------------------------------")
date_sample2 = datetime.date(2020, 2, 10)
print(date_sample2)
print(get_firstday_of_month(date_sample2))
print(get_lastday_of_month(date_sample2))

結果としては以下の様になります。2020年1月と2月を指定した場合もSampleとして実行してみます。

2月の場合に正しく2月29日が返ってきていることが分かりますね

2021-06-25
2021-06-01
2021-06-30
--------------------------------
2020-01-15
2020-01-01
2020-01-31
--------------------------------
2020-02-10
2020-02-01
2020-02-29

2つの日付の間にある日付一覧を取得

あとは2つの日付の間にある日付の一覧を取得したい場合には以下の様に実行します。

リストで取得するには少し複雑な計算になるのでpandasを利用します。pandasはPythonの標準ライブラリには含まれていないのでpipからインストールしてください。

pip install pandas

関数としては以下の様になります。2つの日付(date2のほうが未来である必要があります)を渡すと日付のArrayが返ってきます。

# 2つの日付の間にあるdateを取得する
def get_date_list_between_two_days(date1, date2):
    date_diff_index = pd.date_range(start=date1, end=date2, freq="D")
    print(type(date_diff_index))
    date_diff_ary = date_diff_index.to_series().dt.strftime("%Y-%m-%d")
    print(date_diff_ary)

date_sample1 = datetime.date(2020, 1, 15)
date_sample2 = datetime.date(2020, 2, 10)
date_sample3 = datetime.date(2020, 1, 16)

print(get_date_list_between_two_days(date_sample1, date_sample2))
print("--------------------------------")
print(get_date_list_between_two_days(date_sample1, date_sample3))

結果はこのように日付が返されます。

2020-01-15    2020-01-15
2020-01-16    2020-01-16
2020-01-17    2020-01-17
2020-01-18    2020-01-18
2020-01-19    2020-01-19
2020-01-20    2020-01-20
2020-01-21    2020-01-21
2020-01-22    2020-01-22
2020-01-23    2020-01-23
2020-01-24    2020-01-24
2020-01-25    2020-01-25
2020-01-26    2020-01-26
2020-01-27    2020-01-27
2020-01-28    2020-01-28
2020-01-29    2020-01-29
2020-01-30    2020-01-30
2020-01-31    2020-01-31
2020-02-01    2020-02-01
2020-02-02    2020-02-02
2020-02-03    2020-02-03
2020-02-04    2020-02-04
2020-02-05    2020-02-05
2020-02-06    2020-02-06
2020-02-07    2020-02-07
2020-02-08    2020-02-08
2020-02-09    2020-02-09
2020-02-10    2020-02-10
Freq: D, dtype: object
--------------------------------
2020-01-15    2020-01-15
2020-01-16    2020-01-16
Freq: D, dtype: object

Process finished with exit code 0

Pythonのオススメ勉強方法

私がオススメするPython初心者向けの最初に購入すべき書籍は「シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全です。

シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

この書籍は実際にシリコンバレーの一流エンジニアとして活躍している酒井潤さんが書いた本です。

内容も初心者から上級者までまとめられており、各Lessonも長すぎずに分かりやすくまとめられているので、初心者の方にもおすすめです。

シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

今回は以上となります。

コメント

タイトルとURLをコピーしました