Pythonの日時操作の方法をまとめた記事です。
日時に苦手意識を持っている方は多いですが、その原因は日時の表現方法(=型)が複数あるためだと思います。
まずは、日付を表す型が複数あることを知りましょう。
- datetime型
- date型
- time型
- timedelta型
- str型
そしてこれらの型ごとの違いを理解すれば、日時の操作はそこまで難しいことではありません。
本記事では日付操作で迷ってしまいがちなポイントを中心にまとめましたので、コーディング中に困ってしまった際にはきっと参考になるはずです。
なお、Pandasの日付操作に関してはここではなくPandas記事に譲りました。
こちらも併せてご活用ください!

datetimeの使い方
datetimeは名前の通り「日付」と「時刻」を組み合わせたものです。
より細かく分けると、year, month, day, hour, minute, second, microsecondとなります。
datetimeモジュールのインポート
import datetime
日時を扱うモジュールであるdatetimeは標準モジュールなので、pip installする必要はありません。
そのため、上記のようにいきなりdatetimeをインポートすればOKです。
現在の日時を取得する
# 現在の日時を取得
now = datetime.datetime.now()
print(now)
# datetime.datetime(2022, 6, 25, 23, 17, 54, 420000)
ファイル名を実行時の日時にしたい場合に便利です。
datetime型から要素を抽出
# 現在の日時を取得
now = datetime.datetime.now()
# 要素を変数に格納
year = now.year
month = now.month
day = now.day
hour = now.hour
minute = now.minute
second = now.second # マイクロ秒
print(year, month, day, hour, minute, second)
# (2022, 6, 26, 21, 10, 45)
timedelta型
timedelta型にすると楽に時間計算できます。
経過時間の差分を取ったり、時間を足し合わせて行ったりする場合に便利です。
timedeltaのインポート
from datetime import timedelta
datetime.timedeltaとすれば使えるんですが、毎回これを書くと面倒ですよね。
そこで上記のように呼び出すことにより、timedeltaと書くだけで呼び出せるようになります。
timedeltaを使って時間を作る
delta = timedelta(
days=50,
seconds=27,
microseconds=10,
milliseconds=29000,
minutes=5,
hours=8,
weeks=2
)
print(delta)
# datetime.timedelta(days=64, seconds=29156, microseconds=10)
上記のようにtimedeltaの引数に値を渡していくと、days, seconds, microsecondsを要素とするtimedelta型の値が得られます。
引数に渡した値がそのまま採用されるわけではなくて、入力値が合計された後に「日」「分」「秒」に再計算されるイメージです。
timedelta型の変数を「時間」単位に変換
# timedelta型の1時間30分を変数に格納
var = timedelta(hours=1, minutes=30)
# 時間部分を抽出
hour = var/timedelta(hours=1)
print(var, hour)
# datetime.timedelta(seconds=5400), 1.5
ここでは「時間」単位に変換していますが、5行目のhoursをminutesなどに変えれば分単位に変換することもできます。
時間の比較
#1 timedelta型同士の比較
td1 > td2
#2 timedelta型と具体的な時間の比較
td/timedelta(days=1) > 1 # 1日以上かどうか
td/timedelta(hours=1) > 6 # 6時間以上かどうか
td/timedelta(minutes=1) > 20 # 20分以上かどうか
timedelta型同士ならそのまま比較演算子が使えます。
一方で「6時間以上か?」など具体的な時間と比較したい場合は、timedelta型を比較したい単位に変換した後に比較演算子を使います。
型変換
日付型から他の型への変換方法を解説します。
datetime型→str型に変換|strftime使用
# 現在の日時を取得
now = datetime.datetime.now()
var1 = now.strftime("%Y%m%d")
var2 = now.strftime("%Y/%m/%d")
print(var1) # '20220625'
print(var2) # '2022/06/25'
出力する文字列の形式は公式ドキュメントの書式コードを参考に組み立てましょう。
datetime型→str型に変換|f-strings使用
# 現在の日時を取得
now = datetime.datetime.now()
var1 = f"{now:'%Y%m%d'}"
var2 = f"{now:'%Y/%m/%d'}"
print(var1) # '20220625'
print(var2) # "2022/06/25"
書式コードはstrftimeを使う場合と同様、公式ドキュメントを参照してください。
str型→datetime型
now = '2022/06/26'
var = datetime.datetime.strptime(now, '%Y/%m/%d')
print(var)
# 2022-06-26 00:00:00
strptimeの第二引数に書式のパターンを渡してやると、datetime型に変換できます。
もともとの文字列が‘2022年6月26日’なら、strptime(now, ‘%Y年%m月%d日’)とすることでうまく変換できます。
datetime型→date型
# 現在の日時を取得
now = datetime.datetime.now()
now_date = now.date()
print(now_date)
# 2022-06-25
時間部分が除外され、年月日のみが残りました。
datetime型→time型
# 現在の日時を取得
now = datetime.datetime.now()
now_time = now.time()
print(now_time)
# 23:32:09.442000
年月日が除外され、時間部分のみが残りました。
まとめ
日時を理解するには、同じものを表すにも複数の書き方(型)があることを知ることが大事です。
Pandasの日付操作を知りたい方は次の記事で説明してるので併せて参考にしてみてください!

コメント