ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【python】日時を扱うdatetimeについて

 pythonで日時の計算をしたい場合があります。

 その場合は標準ライブラリであるdatetimeを使うことになりますが、毎回調べたりするのが面倒なのでその備忘録として記事にした次第です。


 では、始めます。


1:datetimeで現在日時を取得する
 まずはよくある使い方として現在日時を取得する方法です。

 以下のように記述するだけで現在時刻を取得できます。

from datetime import datetime

now_datetime = datetime.now() # 現在日時を取得

print(now_datetime)

# 結果例
# 2020-12-11 18:53:59.833597

 いい感じの文字列として整形したい場合は以下のようにstrftimeを使います。

from datetime import datetime

now_datetime = datetime.now() # 現在日時を取得
now_datetime_str = now_datetime.strftime("%Y/%m/%d %H:%M:%S") # 現在日時を整形(yyyy/mm/dd HH:MM:SS)

print(now_datetime_str)

# 結果例
# 2020/12/11 18:57:39


2:文字列で来た日時をdatetimeに変換する
 DBなどに保存された文字列の日時情報をdatetimeに変換して扱いたい場合もあるかと思います。

 その場合は以下のようにします。

from datetime import datetime

dt = datetime.strptime("2020/12/10 13:02:37", "%Y/%m/%d %H:%M:%S") # 任意のdatetime作成

print(type(dt))
print(dt)
# 結果
# <class 'datetime.datetime'>
# 2020-12-10 13:02:37

 その他にも以下のような特殊な場合は余計な部分を削除したり置換したりして整形します。

from datetime import datetime

# ちょっと特殊な場合
test_date = "2020/12/11T10:07:45.973831+09:00"

# 変換に邪魔になる部分を置換
test_date = test_date.replace("T"," ")
test_date = test_date.replace("+09:00","")

# 日時を整形
test_date = datetime.strptime(test_date, "%Y/%m/%d %H:%M:%S.%f")

print(type(test_date))
print(test_date)

# 結果
# <class 'datetime.datetime'>
# 2020-12-11 10:07:45.973831


3:datetimeの差分を計算する
 日時同士の差分を取って時間経過を知りたい場合もあるかと思います。

 その場合は以下のようにします。ちなみに過去日時から未来日時を引いた場合、マイナスの日時になります。

from datetime import datetime

# 過去の時間
time_1 = datetime.strptime("2020/12/10 13:02:37", "%Y/%m/%d %H:%M:%S")
print(time_1)

# 少し先の時間
time_2 = datetime.strptime("2020/12/10 13:12:37", "%Y/%m/%d %H:%M:%S")
print(time_2)

# 差分を計算
result = time_2 - time_1
print("time_2 - time_1 = {}".format(str(result)))

# 差分秒数を取得
result_seconds = result.total_seconds()
print(result_seconds)

if result_seconds >= 600.0:
    # 10分(600秒以上)差分があるかを判定
    print("10 minute over!")

# ----- 過去日時から未来日時を引くとマイナスになる -----
result2 = time_1 - time_2
print("time_1 - time_2 = {}".format(str(result2)))

# 差分秒数を取得
result_seconds2 = result2.total_seconds()
print(result_seconds2)


 以上がpythonにおけるdatetimeの扱い方です。

 日時の差分を取ったりするのは何かと使う機会があるかと思います。


・参考資料