文字列を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'