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) |
%x | localeに依存した日付を表す文字列 |
%X | localeに依存した時間を表す文字列 |
%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モジュールを使用したサンプルコードです。このモジュールを活用することで、日付と時間の処理を簡単に実装することができます。