web-dev-qa-db-ja.com

Python日付比較

特定のpython datetimeオブジェクトがX時間またはX分より古いかどうかを確認したいと思います。次のようなことをしようとしています。

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes

これにより、型エラーが生成されます。

Pythonで日時比較を行う適切な方法は何ですか?私はすでに WorkingWithTime を見ましたが、これは近いですが、私が望むものではありません。通常のint比較を実行できるように、datetimeオブジェクトを秒単位で表したいだけです。

日時のベストプラクティスのリストを投稿してください。

62
Ryan White

使用 datetime.timedeltaクラス:

>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True

あなたの例は次のように書くことができます:

if (datetime.now() - self.timestamp) > timedelta(seconds = 100)

または

if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
110
John Millikin

作成したタイムデルタと違いを比較します。

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'
5
William

代替案:

if (datetime.now() - self.timestamp).total_seconds() > 100:

Self.timestampが日時インスタンスであると仮定します

5
Chong Ying Fan

返されたオブジェクトの「日」属性と「秒」属性の組み合わせを使用して、次のように答えを見つけることができます。

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.

常に正の秒数が必要な場合は、答えにabs()を使用します。

タイムスタンプの過去の秒数を調べるには、次のように使用できます。

if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass
1
Jerub

2つの datetime オブジェクトを減算して、それらの違いを見つけることができます。
datetime.fromtimestampを使用して、POSIXタイムスタンプを解析できます。

0
William Keller

そのようです:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
0
Jeremy Cantrell