2009-12-02 15 views
51

Python'da zamanları nasıl karşılaştırırım?Python zaman karşılaştırması

Bu tarih karşılaştırmalarının yapılabildiğini ve ayrıca "timedelta" olduğunu görüyorum, ancak şu anki saatin (datetime.now()) daha erken, aynı veya daha sonra olup olmadığını nasıl kontrol edeceğimi öğrenmek için uğraşıyorum. tarihten bağımsız olarak belirli bir süreden (örneğin 8:00).

cevap

78

Sen zaman belirli bir noktayı karşılaştırmak olamaz düzeltilmemiş, tekrar eden bir olaya karşı "şu anda") (her gün 8:00).

şimdi ise önce veya bugünün 8 am sonra kontrol edebilirsiniz:

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0) 
>>> now < today8am 
True 
>>> now == today8am 
False 
>>> now > today8am 
False 
+3

Kabulü, Pär Wieslander'ın cevabına çevirmek isteyebilirsiniz (ve genellikle sizden daha birkaç dakika beklemeniz gerekir: P), tam olarak ne sorduğunuza göre biraz daha spesifiktir. –

1

datetime karşılaştırma yeteneği

>>> import datetime 
>>> import time 
>>> a = datetime.datetime.now() 
>>> time.sleep(2.0) 
>>> b = datetime.datetime.now() 
>>> print a < b 
True 
>>> print a == b 
False 
7

Sen datetime.datetime nesneleri doğrudan

Ör karşılaştırabilirsiniz vardır: (örneğin

>>> a 
datetime.datetime(2009, 12, 2, 10, 24, 34, 198130) 
>>> b 
datetime.datetime(2009, 12, 2, 10, 24, 36, 910128) 
>>> a < b 
True 
>>> a > b 
False 
>>> a == a 
True 
>>> b == b 
True 
>>> 
44

Sen almadan karşılaştırma için kullanabilirsiniz günün saatini almak için datetime nesnelerin time() yöntemi kullanabilirsiniz Roger Pate esinlenerek

>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30) 
>>> last_night = datetime.datetime(2009, 12, 1, 20, 0) 
>>> this_morning.time() < last_night.time() 
True 
+14

+1. Ayrıca şimdi yapabilirsiniz. Time()

+1

datetime.datetime.now(). Time() ''ı yaptığınızdan emin olun,'()' deki parantezleri unutmayın! –

4

: hesaba tarih

import datetime 
def todayAt (hr, min=0, sec=0, micros=0): 
    now = datetime.datetime.now() 
    return now.replace(hour=hr, minute=min, second=sec, microsecond=micros)  

# Usage demo1: 
print todayAt (17), todayAt (17, 15) 

# Usage demo2:  
timeNow = datetime.datetime.now() 
if timeNow < todayAt (13): 
    print "Too Early" 
1

Bağımlılıklar eklemeden veya datetime özelliğini kullanmadan bunu yapmanın başka bir yolu, yalnızca zaman nesnesinin özniteliklerine bazı matematik yapmaktır. Saat, dakika, saniye, milisaniye ve bir saat dilimi vardır. Çok basit karşılaştırmalar için, saat ve dakikalar yeterli olmalıdır.

d = datetime.utcnow() 
t = d.time() 
print t.hour,t.minute,t.second 

İnanılmaz derecede basit bir kullanım çantanız olmadığı sürece bunu yapmanızı önermem. Saat dilimi farkındalığı veya tarih bilinci gerektiren her şey için, datetime kullanmalısınız.