2013-01-31 5 views
9

これが密であれば、事前にごめんなさい。私は最後にツイートを投稿してから、その日を探しています。私が取り組んでいる問題は、今日と昨日などの日付が異なる場合ですが、十分な時間が過ぎて完全な「日」にならない場合です。timedelta.daysが1未満のときにPythonで "日数"を決める

# "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時発言でつぶやきを投稿して今日の午前8時にスクリプトを実行している場合、唯一の15時間が0日である、合格したということです。しかし、明らかに私はそれが昨日だったら私の最後のつぶやき以来1日だったと言いたい。今日、私がツイートした場合、結果は0になります。

違いを得るためにtimedeltaを使用するよりも良い方法はありますか?「+1」を追加することは助けになりません。マッティ・ライラ

で答えを提供


ソリューションは、それらが(タイムスタンプなし)粗い日付オブジェクトに変換されますので、日付時刻に().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 
+0

:次のコードでは "0" をoutputing後

一部? –

+0

あなたが正しいローカルタイムゾーン/タイムゾーン設定を持っていると仮定して、タイムゾーンを手動で管理しないようにするには、 'rightNow = datetime.utcnow()'を試してください。 – SingleNegationElimination

+0

.secondsは、ツイート間の_days_を知りたいので役に立ちません。午後11時にツイートを掲示し、午前1時(2時間後)にスクリプトを実行すると、「1」が返されます。しかし、私が午前1時にツイートを投稿し、午前3時にスクリプトを実行すると、 "0"が返されます。 .secondsは.daysと同じ問題を抱えています。 utcnow()は問題ありませんが、私のツイートの時刻を自分の現地時間に変換するのか、それとも私の現地時間をUTCに変換するのかは、ちょうど6つで、もう一方は6つです。 – psxndc

答えて

8

次の2つの日付(注:回ではありません日付)を比較するためにdatetime.date()を使用することができ、これは数日ではない時間の解像度を持つように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

ガー、私はちょうどこれを投稿する途中でした... +1 –

+0

まさにそれを覚えようとしていたもの...長い一日。 +1 – isedev

+0

ああ - そこに行きます。私は、私が考慮しなかったUTC対ローカルの問題について非常に心配していました - そして、私がドキュメントを見たと信じて、私は誓います! - 正しい日付を取得した後は、粗い粒度に戻って変換します。ありがとうございました!! – psxndc

5

どうですか?その後、dt.seconds` `を見ていると間違って何

>>> 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 
+0

これは役に立ちました。ありがとう! – psxndc

関連する問題