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
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です