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


106

Tarih karşılaştırmalarının yapılabildiğini görüyorum ve ayrıca var datetime.timedelta(), ancak şu anki saatin ( datetime.datetime.now()) tarihe bakılmaksızın belirli bir zamandan (örn. 08:00) daha erken mi, daha sonra mı yoksa aynı mı olduğunu kontrol etmek için uğraşıyorum .


2
Bunu bir cevap olarak koymak konusunda emin değilim, ama buraya yorum olarak koyuyorum: şaşırtıcı bir şekilde, Python'un tıpkı sizin iki değer arasında yapacağınız gibi '23:23:00' > '23:59:00'veya gibi karşılaştırmaları kabul ettiğini buldum . Zamanlar arasında karşılaştırma yapmanın en iyi yolu bu mu? Bilmiyorum. Çalışıyor mu? Test ettiğim kadarıyla iyi çalıştı. Ama kesinlikle (ve elbette): bunu ay, hafta içi olan datetime dizesi ile kullanma şansı yok. '23:23:00' > '23:09:22'datetime.datetime.now().strftime('%H:%M')
ivanleoncz

Yanıtlar:


142

Sen olamaz (08:00 her gün oluyor) Düzenli etkinliği, bir sabitlenmemiş karşı (örneğin, "hemen şimdi" gibi) zaman içinde belirli bir noktayı karşılaştırın.

Şu anın bugün sabah 8'den önce mi sonra mı olduğunu 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

4
Kabulü Pär Wieslander'in cevabına çevirmek isteyebilirsiniz (ve genellikle sizin yaptığınızdan birkaç dakika daha beklemelisiniz: P), çünkü tam olarak sorduğunuz şeye biraz daha spesifiktir.

69

Sen kullanabilirsiniz time()yöntemini datetimedikkate tarihini almadan karşılaştırma için kullanabileceğiniz gün, saatini almak için nesneler:

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

2
Yaptığınızdan emin olun datetime.datetime.now().time(), içindeki parantezleri unutmayın now()!
Jose Salvatierra

10

Datetime.datetime nesnelerini doğrudan karşılaştırabilirsiniz

Ö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
>>> 

5

Roger Pate'den ilham aldı:

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"

3

Timedelta işlevini x zaman artışı karşılaştırması için kullanabilirsiniz.

>>> import datetime 

>>> now = datetime.datetime.now()
>>> after_10_min = now + datetime.timedelta(minutes = 10)
>>> now > after_10_min 

False

Sadece bu cevapların bir kombinasyonu bu And Roger


2

Bunu bağımlılıklar eklemeden veya datetime kullanmadan yapmanın başka bir yolu, zaman nesnesinin nitelikleri üzerinde biraz matematik yapmaktır. Saat, dakika, saniye, milisaniye ve saat dilimi vardır. Çok basit karşılaştırmalar için saat ve dakika yeterli olmalıdır.

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

İnanılmaz derecede basit bir kullanım durumunuz yoksa bunu yapmanızı önermiyorum. Saat dilimi farkındalığı veya tarihler hakkında farkındalık gerektiren herhangi bir şey için, tarih saati kullanmalısınız.



1

tarihsaat karşılaştırma yeteneğine sahiptir

>>> import datetime
>>> import time
>>> a =  datetime.datetime.now()
>>> time.sleep(2.0)
>>> b =  datetime.datetime.now()
>>> print a < b
True
>>> print a == b
False
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.