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の効果的な学習方法は「Udemy(ユーデミー)」によるビデオ学習です。

「Udemy」は、オンライン学習の提供サイトです。学びたい人は多くある講座の中から受講したいコースを選択することができ、動画で学べるのが特徴です。

多くあるPythonのコースの中でもオススメするPythonのコースは以下となります!!

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

このコースでは合計で28.5時間のビデオ講座があって、それらを受講するだけで、Pythonの基礎から応用まで学ぶことができます。

私も購入して受講していますが、内容としては初心者の方から上級者まで対応する幅広い内容になっています。

下手な書籍を何冊か購入するより、この動画コースを最初からじっくりと受けることで総合的なスキルを習得することができるできます。おそらくこれ以上の教材はないと思いますので、絶対おすすめです。

ちなみに、Udemyでは頻繁にセール(1か月に2,3回程度)が開催されているので、セールのタイミングで購入すれば90%OFFになる講座もあるため、セールが開催されてからの購入をオススメします!

今回は以上となります。

コメント

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