2010-04-07 37 views
42

Tôi có một biến là <type 'datetime.timedelta'> và tôi muốn so sánh nó với một số giá trị nhất định.So sánh một đồng bằng thời gian trong python

phép nói rằng d sản xuất datetime.timedelta giá trị này 0:00:01.782000

Tôi muốn so sánh nó như thế này:

#if d is greater than 1 minute 
if d>1:00: 
    print "elapsed time is greater than 1 minute" 

Tôi đã thử chuyển đổi datetime.timedelta.strptime() nhưng điều đó dường như làm việc. Có cách nào dễ dàng hơn để so sánh giá trị này không?

+1

Lưu ý rằng '0: 00: 01.78200' là hình thức của timedelta khi được in, nhưng đó không phải là định dạng đặc biệt hữu ích khi gỡ lỗi. Sử dụng 'repr()' để hiển thị thông tin chính xác hơn. Bằng cách đó bạn có thể đoán được giải pháp, vì 'repr (d)' sẽ hiển thị 'datetime.timedelta (0, 1, 782000)' –

Trả lời

60

Bạn sẽ phải create a new timedelta với số tiền quy định thời gian:

d > timedelta(minutes=1) 

Hoặc kịch bản này hơi hoàn chỉnh hơn sẽ giúp công phu:

import datetime 
from time import sleep 

start = datetime.datetime.now() 
sleep(3) 
stop = datetime.datetime.now() 

elapsed = stop - start 

if elapsed > datetime.timedelta(minutes=1): 
    print "Slept for > 1 minute" 

if elapsed > datetime.timedelta(seconds=1): 
    print "Slept for > 1 second" 

Output:

Slept for > 1 second

10

Bạn chỉ cần tạo timedelta đối tượng từ đầu, so sánh sau đó là tầm thường:

>>> a = datetime.timedelta(minutes=1) 
>>> b = datetime.timedelta(minutes=1, seconds=1) 
>>> a < b 
True 
>>> a > b 
False 
3

Đúng tôi nếu tôi sai nhưng tôi nghĩ rằng bạn cũng có thể sử dụng như sau:

Thay vì

if elapsed > datetime.timedelta(seconds=1): 

Bạn có thể nói

if elapsed.seconds > 1: 
0
if d.total_seconds() > 60: 
    print("elapsed time is greater than 1 minute") 

nhưng yêu cầu python 2.7+

Các vấn đề liên quan