Pythonで日時を文字列に変換し、日時計算(加算・差分)をする方法を詳しく解説
Python で日時操作する時に便利で最も一般的なモジュールの 1 つに 標準ライブラリdatetimeがあります。datetimeは日付と時刻のオブジェクトデータを操作するためのもので、 日付・日時オブジェクトの作成、日付範囲のループ、日付文字列の解析と書式設定などを行うことができます。
Pythonで日時操作は頻繁に使われ、正確な操作が必要です。豊富な機能と柔軟性を提供し、日時に関連するタスクを効率的に実行できるようにします。
例えば、’datetime’モジュールに含まれる’datetime’クラスは、日付や時間の取得、計算、比較が可能です。’strftime’メソッドを使えば、日時を特定の書式にフォーマットすることもできます。また、’timedelte’クラスは、日時の差分を扱う時に便利です。
これらを使用した操作を下記で詳しく解説します。
因みに文字列解析とは
文字列を取得 → 処理 → 情報を抽出する
というプロセスのことを言います。
もくじ
日時を操作するメソッド
現在の日時を取得する
datetimeメソッドを使ったサンプルコードは下記となります。
from datetime import datetime
# 変数「now」に現在の日時を取得し代入
now = datetime.now()
# 変数「str_now」に現在の日時を
str_now = now.strftime('%Y-%m-%d %H:%M:%S')
# 変数「dt」に文字列にした変数「str_now」を日時に変換
dt = datetime.strptime(str_now, '%Y-%m-%d %H:%M:%S')
# 変数「dt」の出力結果を確認
print(dt)
#出力結果
2023-07-24 08:10:13
日付文字列を変換するstrptimeメソッドとstrftimeメソッド
日付を文字列を変換、文字列を日時に変換するには、datetimeモジュールのstrptime()メソッドとstrftime()メソッドを使用します。strptime()メソッドは、日付文字列をdatetimeオブジェクトに変換し、strftime()メソッドは、datetimeオブジェクトを日付文字列に変換します。
たとえば、次のコードは、”2023-06-03″という日付文字列をdatetimeオブジェクトに変換します。
Pythonで日付文字列を変換する必要があるのは、次のとおりです。
- 日付文字列のフォーマットが不正で、Pythonのdatetimeオブジェクトとして解釈できない場合。
- 日付文字列のフォーマットが正しいが、Pythonのdatetimeオブジェクトとして解釈したときに、必要な日付と時刻が得られない場合。
- 日付文字列を別のフォーマットに変換したい場合。
日付の一部を変更するreplaceメソッド
Pythonのdatetime.replace()メソッドは、日付または時刻オブジェクトの値を置き換えます。このメソッドは、次の引数を受け取ります。
- year: 置き換える年
- month: 置き換える月
- day: 置き換える日
- hour: 置き換える時間
- minute: 置き換える分
- second: 置き換える秒
- microsecond: 置き換えるマイクロ秒
- tzinfo: 置き換えるタイムゾーン
たとえば、次のコードは、2023年1月1日の午前9時00分に設定された日付オブジェクトを作成します。
from datetime import datetime
dt = datetime(2023, 1, 1, 9, 0)
print(dt)
#出力結果
2023-01-01 09:00:00
dtオブジェクトの日付を2023年3月1日に変更します。
dt = dt.replace(year=2023, month=3, day=1)
print(dt)
#出力結果
2023-03-01 09:00:00
datetime.replace()メソッドを使用して、日付または時刻オブジェクトの値を簡単に変更することができました。
このようにreplaceメソッドは、変更する属性をキーワード引数として指定します。
例えば、year属性を2022年に変更するには、replace(year=2022)とします。
dtオブジェクトの時刻を午後4時30分に変更します。
dt=dt.replace(hour=16,minute=30)
print(dt)
#出力結果
2023-03-01 16:30:00
replaceメソッドは、タイムゾーンの値が含まれないインスタンスにも使用できます。タイムゾーンの値を追加するには、tzinfo属性をキーワード引数として指定します。例えば、タイムゾーンUTCを追加するには、replace(tzinfo=timezone.utc)とします。
replaceメソッドは、日付や時刻の一部を別の値に置き換えた新しいインスタンスを生成するのに役立ちます。
日付と時刻の差を表すtimedelta
Pythonのtimedeltaは、日付と時刻の差を表すオブジェクトです。timedeltaオブジェクトは、日数、時間、分、秒、ミリ秒、マイクロ秒、ナノ秒で構成されます。
timedeltaオブジェクトの作成には、datetime.timedelta()メソッドを使用します。
total_seconds() | オブジェクトの秒数を返す |
days() | オブジェクトの日数を返す |
hours() | オブジェクトの時間を返す |
minutes() | オブジェクトの分を返す |
seconds() | オブジェクトの秒を返す |
milliseconds() | ブジェクトのミリ秒を返す |
microseconds() | オブジェクトのマイクロ秒を返す |
nanoseconds() | オブジェクトのナノ秒を返す |
まずは、次のコードは、1日は何秒かを表すtimedeltaオブジェクトを作成します。
import datetime
Ownday=datetime.timedelta(days=1)
Ownday_sec=Ownday.total_seconds()
print(Ownday_sec)
#出力結果
86400.0
日付と時刻の加算
このコードは、現在の日時から10日後の日時を取得しています。
import datetime
# 現在の日時を取得する
now = datetime.datetime.now()
# 現在から10日加算する
end_date=now+datetime.timedelta(days=10)
# 日時を表示する
print(end_date)
#出力結果
#2023-07-08 12:53:05.102771
日時を加算する方法はいくつかありますが、目的に合わせて適切な方法を選択してください。
日付と時刻の差を表す
下記コードは、2023年6月27日12:00:00と2023年7月10日12:00:00の差分を計算しています。
日時差分は、timedelta オブジェクトとして返されます。timedelta オブジェクトには、日数、秒数、マイクロ秒数などの情報が含まれています。
出力結果は、何時間何分何秒かを表しています。
import datetime
# 2つの日時を取得する
first_date = datetime.datetime(2023, 6, 27, 12, 0, 0)
second_date = datetime.datetime(2023, 7, 10, 12, 0, 0)
# 日時差分を計算する
delta = second_date - first_date
# 日時差分を表示する
print(delta)
#出力結果
13 days, 0:00:00
Python datetimeを使って日時を操作のまとめ
今回はPython標準ライブラリdatetimeを使用して日付と時刻の基本的な操作を紹介いたしました。
Pythonの日時操作メソッドを活用することで、日時に関連するタスクを正確かつ効率的に作業することができます。プログラム内で日時を操作する必要がある場合、Pythonの日時操作メソッドを活用してください。