プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

Pythonの日付と時刻の差分計算

文字列をdatetimeオブジェクトに変換して引き算できる

なのですがややこしくて、TweepyでTweetからの時間(日数)を計算しようとしたら躓いたのでここにまとめます。

まず、基本のdatetimeオブジェクトの差分は以下のようにできます。
ここでは、任意のパラメータは省略可能で以下のように省略するとminute=0とみなされます。

import datetime
dt1 = datetime.datetime(year=2022, month=5, day=14, hour=15,second=10)#省略すると0になる
dt0 = datetime.datetime.now()
print(dt0-dt1)
>>>397 days, 5:51:43.213087

また、日時が文字列の場合はdatetimeオブジェクトに変換することで計算可能になります。

import datetime
dt2 = datetime.datetime.strptime("2022-04-12", '%Y-%m-%d')
dt0 = datetime.datetime.now()
print(dt0-dt2) 
>>>397 days, 17:51:48.213087

時刻まで必要な場合は以下のようにします。

import datetime
dt3 = datetime.datetime.strptime("2022-04-12 12:10", '%Y-%m-%d %H:%M')   
dt0 = datetime.datetime.now()
print(dt0-dt3) 
>>>397 days, 5:41:48.213087

TweepyでTweet日時を取得して、これが「2日以上前であったら」とするには以下のようにします。
TweepyでTweet日時はcreated_atパラメータで取得できます。

import datetime
#datetime.datetime.strptime(str(status.created_at), '%Y-%m-%d %H:%M:%S' )
#>>>unconverted data remains: +00:00
dte = datetime.datetime.strptime(str(status.created_at)[:10], '%Y-%m-%d')
if (datetime.datetime.now()-dte).days > 1:
    print(dte)

ここで、TweepyでのTweet日時の取得形式は以下のようになっていますが、created_atがdatetimeオブジェクトのように見えるけど、なぜかそのままでは計算できなくて、日付(および日時)部分を取り出して、datetimeオブジェクトに変換すると計算できました。

status.created_at
>>>datetime.datetime(2023, 5, 14, 8, 35, 35, tzinfo=datetime.timezone.utc)
str(status.created_at)
>>>'2023-05-14 08:35:35+00:00'
str(status.created_at)[:10]
>>>'2023-05-14'