Pythonで日時データを扱う方法
Pythonで日時データを扱う場合、標準ライブラリのdatetime
モジュールを使用します。このモジュールのdatetimeオブジェクトを利用することで、日付や時間の操作、フォーマットが簡単に行えます。
datetimeオブジェクトの生成
現在時刻でdatetime
オブジェクトを作成する場合は、次のようにします。
datetime.now()
日付を指定してdatetime
オブジェクトを作成する場合は、次のようにします。
datetime(2024, 4, 20) # 年, 月, 日
日付時刻を指定してdatetime
オブジェクトを作成する場合は、次のようにします。
datetime(2023, 1, 20, 17, 58, 9) # 年, 月, 日, 時, 分, 秒
datetimeオブジェクトを文字列に変換
Pythonでdatetime
オブジェクトを文字列に変換するには、strftime()
メソッドを使用します。strftime()
メソッドを使用すると、datetime
オブジェクトを指定したformat
の文字列に変換できます。
strftime(format)
使用方法
import datetime
now = datetime.datetime.now()
# 日時を指定したフォーマットの文字列に変換
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date) # 2023-11-21 00:46:53
フォーマット文字列
ディレクティブ | 内容 |
---|---|
%Y |
4桁の西暦 |
%m |
0埋めした月 |
%d |
0埋めした日付 |
%H |
0埋めした24時間表記の時刻 |
%I |
0埋めした12時間表記の時刻 |
%M |
0埋めした分 |
%S |
0埋めした秒 |
%f |
マイクロ秒(6桁) |
%p |
AMやPMといった文字列 |
%b |
月名の短縮形 |
%B |
月名 |
%a |
曜日名の短縮形 |
%A |
曜日名 |
ミリ秒までを表示したい場合は、次のようにします。
import datetime
# 現在の日時を取得
now = datetime.datetime.now()
# ミリ秒を取得
milliseconds = now.microsecond // 1000 # マイクロ秒をミリ秒に変換
timestamp_string = now.strftime(f"%Y-%m-%dT%H:%M:%S.{milliseconds:03d}")
print(timestamp_string) # 2024-10-02T18:00:01.462
文字列からdatetimeオブジェクトを作成
文字列からdatetime
オブジェクトを作成するには、strptime()
メソッドを使用します。format
にはdate_string
がどのような書式で記述されているかを指定します。
strptime(date_string, format)
使用方法
import datetime
date_string = '2023/11/21 00:30:15'
date_obj = datetime.datetime.strptime(date_string, "%Y/%m/%d %H:%M:%S")
print(date_obj) # 2023-11-21 00:30:15
%f
はマイクロ秒を表しますが、strptime()
メソッドで3桁のマイクロ秒を指定した場合、後ろに3桁のゼロが付加され、実質的にミリ秒として扱われます。
timestamp_string = datetime.datetime.strptime('20241002123045025', "%Y%m%d%H%M%S%f").strftime("%Y-%m-%dT%H:%M:%S.%f")
print(timestamp_string) # 2024-10-02T12:30:45.025000
日付や時刻を変更する方法
日付や時刻を変更するには、replace()
メソッドを使用します。
# datetimeの記述が冗長なら、次のようにする
from datetime import datetime
current_time = datetime.now()
date_format = "%Y/%m/%d"
date = datetime.strptime('2024/05/05', date_format)
print(current_time) # 2024-05-08 15:21:10.769801
current_time = current_time.replace(year=date.year,month=date.month,day=date.day)
print(current_time) # 2024-05-05 15:21:10.769801
ミリ秒を設定する場合
ミリ秒は設定できないので、マイクロ秒で設定します。
# 10ミリ秒
current_time = current_time.replace(microsecond=10000)
print(current_time) # 2024-05-08 15:21:10.010000
# 0ミリ秒
current_time = current_time.replace(microsecond=0)
print(current_time) # 2024-05-08 15:21:10