これが濃い場合は事前に申し訳ありません。最後にツイートを投稿してからの日数を探しています。私が遭遇している問題は、日付が異なる場合、たとえば今日と昨日ですが、完全な「日」になるのに十分な時間が経過していない場合です。
# "created_at" is part of the Twitter API, returned as UTC time. The
# timedelta here is to account for the fact I am on the west coast, USA
lastTweetAt = result.created_at + timedelta(hours=-8)
# get local time
rightNow = datetime.now()
# subtract the two datetimes (which gives me a timedelta)
dt = rightNow - lastTweetAt
# print the number of days difference
print dt.days
問題は、昨日5 PM=昨日ツイートを投稿し、今日の午前8時にスクリプトを実行している場合、15日しか経過していないこと、つまり0日であることです。しかし、明らかに昨日だった場合は、最後のツイートから1日後です。今日ツイートした場合、結果を0にしたいので、「+ 1」を追加しても意味がありません。
差分を取得するためにtimedeltaを使用するよりも良いアプローチはありますか?
ソリューションマッティ・ライラ提供
答えは、日付時刻に.date()を呼び出して、それらがより粗い日付オブジェクト(タイムスタンプなし)に変換されるようにすることです。正しいコードは次のようになります。
# "created_at" is part of the Twitter API, returned as UTC time.
# the -8 timedelta is to account for me being on the west coast, USA
lastTweetAt = result.created_at + timedelta(hours=-8)
# get UTC time for right now
rightNow = datetime.now()
# truncate the datetimes to date objects (which have dates, but no timestamp)
# and subtract them (which gives me a timedelta)
dt = rightNow.date() - lastTweetAt.date()
# print the number of days difference
print dt.days
datetime.date()
を使用して2つの日付を比較できます(注:日付と時間ではありません)。これにより、datetime
が切り捨てられ、時間ではなく日数の精度になります。
...
# subtract the two datetimes (which gives me a timedelta)
dt = rightNow.date() - lastTweetAt.date()
...
ドキュメントは常にあなたの友達です
http://docs.python.org/2/library/datetime#datetime.datetime.date
日時の「日付」の部分だけを処理するのはどうですか。
次のコードで「0」を出力した後の部分:
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now() - datetime.timedelta(hours=20)
>>> (a-b).days
0
>>> b.date() - a.date()
datetime.timedelta(-1)
>>> (b.date() - a.date()).days
-1