[Python] datetimeモジュールの使い方

Pythonのdatetimeモジュールは、日付と時間の処理を容易にするために使用されます。このモジュールを使用することで、日付と時間のフォーマット、操作、比較、計算などを行うことができます。以下は、Pythonのdatetimeモジュールの使い方を説明するためのサンプルコードです。

目次

日付と時間の取得

現在日時の取得

datetimeモジュールを使用すると、現在の日付と時間を取得することができます。

from datetime import datetime

from datetime import datetime

current_dt = datetime.now()
print("現在の日付と時間:", current_dt)
print("current_dtの型:", type(current_dt))

出力結果:

現在の日付と時間: 2023-04-30 05:38:36.957812
current_dtの型: <class 'datetime.datetime'>

日時の情報から年・月・日・時・分・秒を取得

datetimeを利用すると、日時の情報から年・月・日・時・分・秒の情報だけを絞って取得することができます。

from datetime import datetime

current_dt = datetime.now()
print("現在の日付と時間 : ", current_dt)
print(f"現在の年月日は {current_dt.year} 年 {current_dt.month} 月 {current_dt.day} 日 です。")
print(f"現在の時刻は {current_dt.hour} 時 {current_dt.minute} 分 {current_dt.second} 秒 です。")

print(f"\n取得した値の型は\"int\"型   (例) current_dt.year : {type(current_dt.year)}")

出力結果:

現在の日付と時間 :  2023-04-30 05:48:08.256673
現在の年月日は 2023 年 4 月 30 日 です。
現在の時刻は 5 時 48 分 8 秒 です。

取得した値の型は"int"型   (例) current_dt.year : <class 'int'>

日付と時間のフォーマット

datetimeオブジェクトから、日付と時間を任意の形式で表示することができます。strftimeメソッドを使用すると、指定したフォーマットに従って、日付と時間を文字列に変換することができます。

基本的な書き方

from datetime import datetime

now = datetime.now()
print(f"現在の日時(datetime) : {now}")
print(f"nowの型 : {type(now)}\n")

now_str = now.strftime("%Y/%m/%d %H:%M:%S")
print(f"現在の日時(str) : {now_str}")
print(f"now_strの型 : {type(now_str)}")

出力結果:

現在の日時(datetime) : 2023-04-30 05:56:56.789444
nowの型 : <class 'datetime.datetime'>

現在の日時(str) : 2023/04/30 05:56:56
now_strの型 : <class 'str'>

主なフォーマットコードと使い方

フォーマットコード概要
%Y年(4桁)
%m月(01~12)
%d日(01~31)
%H時(00~23)
%M分(00~59)
%S秒(00~59)
%fマイクロ秒(000000~999999)
%a曜日の省略形(Sun~Sat)
%A曜日のフルネーム(Sunday~Saturday)
%b月の省略形(Jan~Dec)
%B月のフルネーム(January~December)
%c日時を表すロケールに依存した文字列
%j年の初めからの通算日数(001~366)
%U年の初めからの週番号(00~53)
%w曜日を表す数字(0~6、0が日曜日)
%W年の初めからの週番号(00~53)
%xlocaleに依存した日付を表す文字列
%Xlocaleに依存した時間を表す文字列
%Zタイムゾーンの名前
フォーマットコード

上記、「基本的な書き方」で記載した以外のフォーマットコードの使い方は以下のとおりです。同じフォーマットコードでlocale(地域設定)がデフォルトの場合と、日本に設定した場合の2パターンを記載していますので、参考にして下さい。

from datetime import datetime
import locale

# 現在の日時
now = datetime.now()

# フォーマットコードのサンプル(ローカル設定前)
print("----- locale設定前(default) -------")
print("曜日(省略形)\t: ", now.strftime("%a"))
print("曜日       \t: ", now.strftime("%A"))
print("月(省略形)\t: ", now.strftime("%b"))
print("月       \t: ", now.strftime("%B"))
print("曜日,日付,時間,年: ", now.strftime("%c"))
print(f"{now.year}年の何日目?: ",now.strftime("%j"),"日目" )
print(f"{now.year}年の何週目?: ",now.strftime("%U"),"週目" )
print(f"{now.year}年の何週目?: ",now.strftime("%W"),"週目" )
print("曜日(0:Sun - 6:Sat): ",now.strftime("%w") )
print("日付(locale)\t: ",now.strftime("%x") )
print("時間(locale)\t: ",now.strftime("%X") )

# ローカル設定
locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')

# フォーマットコードのサンプル(ローカル設定後)
print("\n----- locale設定後(ja_JP.UTF-8) -------")
print("曜日(省略形)\t: ", now.strftime("%a"))
print("曜日       \t: ", now.strftime("%A"))
print("月(省略形)\t: ", now.strftime("%b"))
print("月       \t: ", now.strftime("%B"))
print("曜日,日付,時間,年: ", now.strftime("%c"))
print(f"{now.year}年の何日目?: ",now.strftime("%j"),"日目" )
print(f"{now.year}年の何週目?: ",now.strftime("%U"),"週目" )
print(f"{now.year}年の何週目?: ",now.strftime("%W"),"週目" )
print("曜日(0:Sun - 6:Sat): ",now.strftime("%w") )
print("日付(locale)\t: ",now.strftime("%x") )
print("時間(locale)\t: ",now.strftime("%X") )

出力結果:

----- locale設定前(default) -------
曜日(省略形)    :  Sun
曜日            :  Sunday
月(省略形)      :  Apr
月              :  April
日時+曜日       :  Sun Apr 30 09:24:04 2023
2023年の何日目?:  120 日目
2023年の何週目?:  18 週目
2023年の何週目?:  17 週目
曜日(0:Sun - 6:Sat):  0
日付(locale)    :  04/30/23
時間(locale)    :  09:24:04

----- locale設定後(ja_JP.UTF-8) -------
曜日(省略形)    :  日
曜日            :  日曜日
月(省略形)      :   4
月              :  4月
曜日,日付,時間,年:  日  4/30 09:24:04 2023
2023年の何日目?:  120 日目
2023年の何週目?:  18 週目
2023年の何週目?:  17 週目
曜日(0:Sun - 6:Sat):  0
日付(locale)    :  2023/04/30
時間(locale)    :  09時24分04秒

フォーマットコード “%U” と “%W” の違い

%U%Wは、どちらも年の初めからの週番号を表すフォーマットコードですが、計算方法が異なります。

%Uは、日曜日を週の初めとして、その年の初めから何週目かを表します。ただし、その年の初めの週が7日に満たない場合は、前年の最後の週にカウントされます。

一方、%Wは、月曜日を週の初めとして、その年の初めから何週目かを表します。同じく、その年の初めの週が4日に満たない場合は、前年の最後の週にカウントされます。

例えば、2023年の最初の週は1月1日(日曜日)から始まるため、%Uでは前年の最後の週にカウントされ、週番号は00になります。一方、%Wでは1月1日は月曜日であり、正しく1週目とカウントされ、週番号は01になります。

日付と時間の演算

datetimeオブジェクトに対して、日付や時間の演算を行うことができます。timedeltaクラスを使用すると、日付や時間の差分を計算することができます。

日数の加減算を行う

例として、現在の日付から1週間後の日付を計算します。
計算する際には現在の日付に7日を加算して、1週間後の日付を求めます。

from datetime import datetime, timedelta

now = datetime.now()
delta = timedelta(days=7)

future_date = now + delta
print("1週間後の日付:", future_date.strftime("%Y/%m/%d"))

出力結果:

1週間後の日付: 2023/05/07

上記以外に当月月初・前月末・翌月月初・当月末の日付を求める計算はよく使うので、サンプルコードを記載します。

当月月初の求め方

datetime(年,月,日)で日付を求めることができるので、まず、基準となる日の年・月を求め、日は”1″を設定することで、当月月初の日付を求めることができる。

from datetime import datetime

now = datetime.now()
first_day_of_month = datetime(now.year, now.month, 1)
print("当月月初:", first_day_of_month.strftime("%Y/%m/%d"))

出力結果:

当月月初: 2023/04/01

前月末の求め方

まず、当月の1日の日付を求めた後、1日減算することで、前月末日の日付を求めることができます。
(例: 20230430の場合: 20230430 -> 20230401 -> 20230331)

from datetime import datetime, timedelta

now = datetime.now()
first_day_of_month = datetime(now.year, now.month, 1)
last_day_of_last_month = first_day_of_month - timedelta(days=1)
print("前月末:", last_day_of_last_month.strftime("%Y/%m/%d"))

出力結果:

前月末: 2023/03/31

翌月月初の求め方

datetime(年,月,日)で日付を求めることができるので、まず、基準となる日の年・月+1を求め、日は”1″を設定することで、翌月月初(datetime(年,月+1,1))の日付を求めることができる。

from datetime import datetime

now = datetime.now()
first_day_of_next_month = datetime(now.year, now.month + 1, 1)
print("翌月月初:", first_day_of_next_month.strftime("%Y/%m/%d"))

出力結果:

翌月月初: 2023/05/01

当月末の求め方

まず、翌月の1日の日付を求めた後、1日減算することで、前月末日の日付を求めることができます。
(例: 20230430の場合: 20230430 -> 20230501 -> 20230430)

from datetime import datetime, timedelta

now = datetime.now()
first_day_of_next_month = datetime(now.year, now.month + 1, 1)
last_day_of_month = first_day_of_next_month - timedelta(days=1)
print("当月月末:", last_day_of_month.strftime("%Y/%m/%d"))

出力結果:

当月月末: 2023/04/30

日付と時間の比較

datetimeオブジェクト同士を比較することで、日付や時間の大小を判定することができます。比較時には<, <=, ==, >=, >といった比較演算子を使用することができます。

from datetime import datetime

date1 = datetime(2023, 4, 1)
date2 = datetime(2023, 4, 30)

if date1 < date2:
    print("date1はdate2よりも前です。")
else:
    print("date1はdate2よりも後です。")

出力結果:

date1はdate2よりも前です。

以上が、Pythonのdatetimeモジュールを使用したサンプルコードです。このモジュールを活用することで、日付と時間の処理を簡単に実装することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次