Bir tarihin datetime.today () ile aynı gün olup olmadığını nasıl kontrol edebilirim?


89

Bu durum True, zamanı karşılaştırdığı için aynı gün olsa bile her zaman değerlendirilir .

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

Bir tarihin aynı gün olup olmadığını nasıl kontrol edebilirim datetime.today()?

Yanıtlar:


176

Sadece tarihleri ​​karşılaştırmak istiyorsanız,

yourdatetime.date() < datetime.today().date()

Ya da tabii ki,

yourdatetime.date() == datetime.today().date()

Aynı tarih olup olmadıklarını kontrol etmek istiyorsan .

Belgeler genellikle faydalıdır. Ayrıca genellikle için ilk google sonucudur python thing_i_have_a_question_about. Sorunuz "yılan" adlı bir işlev / modülle ilgili değilse.

Temel olarak, datetimemodülün zamandaki bir noktayı depolamak için üç türü vardır:

  • date yıl, ay, ayın günü için
  • time saat, dakika, saniye, mikrosaniye, saat dilimi bilgisi için
  • datetimetarih ve saati birleştirir. Bu yöntemleri vardır date()ve time()karşılık gelen almak dateve timenesneleri ve kullanışlı orada combinebirleştirmek için fonksiyon dateve timebir içine datetime.

3
"Ayrıca genellikle python thing_i_have_a_question_about için ilk google sonucudur" Ve birisi bu konuya burada olduğu gibi SO girişi yapmadıysa :)
etkinliği azaltır

37
  • Yalnızca ayın gün değerini karşılaştırmanız gerekiyorsa, aşağıdaki kodu kullanabilirsiniz:

    if yourdate.day == datetime.today().day:
        # do something
    
  • İki tarih arasındaki farkın kabul edilebilir olup olmadığını kontrol etmeniz gerekiyorsa timedelta'yı kullanabilirsiniz :

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • Ve yalnızca tarih bölümünü, kullanabileceğinizden daha karşılaştırmak istiyorsanız:

    from datetime import datetime, date
    if yourdatetime.date() < datetime.today().date()
        # do something
    

Timedelta'nın aşağıdaki biçime sahip olduğuna dikkat edin:

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

Böylece, gerçekten neye ihtiyacınız olduğuna bağlı olarak gün, saniye, milisaniye, dakika ve benzeri olarak farkları kontrol edebilirsiniz:

from datetime import datetime
if (datetime.today() - yourdate).days == 0:
    #do something

İki tarihin tamamen aynı olup olmadığını kontrol etmeniz gerektiğinde, timedelta (0) kullanabilirsiniz:

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something

1
.dayayın günüdür. Dolayısıyla, 12 Ağustos, ilk kod snippet'inizi kullanarak 12 Aralık'a "eşittir". Muhtemelen OP'nin istediği davranış bu değil.
gerçeklik

@trutheality - evet, cevabımı soru düzenlenmeden yazmaya başladım, bu yüzden tam olarak neye ihtiyacı olduğunu anlayamadım, bu yüzden bunun için birkaç seçenek sunuyorum
Artsiom Rudzenka

1
Hızlı not: datetime nesnelerinin 'day' ('s' yok) adlı bir özniteliği vardır ve timedelta nesneleri, insanların sözdizimlerinin neden çalışmadığı konusunda kafa karışıklığı yaşamaları durumunda 'günler' ('s' ile) adlı bir özniteliğe sahiptir.
Colton Hicks

3

Saatleri, dakikaları, saniyeleri ve mikrosaniyeleri istediğiniz gibi ayarlayabilirsiniz

datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

ama gerçekliğin cevabı muhtemelen en iyisidir, hepsi sıfır olduğunda ve sadece .date()zamanların s'lerini karşılaştırabilirsin

Belki daha hızlıdır, ancak yüzlerce veri zamanını karşılaştırmak zorunda kalırsanız, çünkü yalnızca bir veya replace()yüzlerce çağrı yapmanız gerekir .date()


Mutasyon içermeseydi buna oy verirdim. Bununla birlikte, karşılaştırdığınız datetime nesnelerinin bir klonunu oluşturarak bu yöntemi uyarlayabilir, ardından alt gün çözünürlüğüne sahip alanları kaldırarak değiştirebilir ve ardından kopyaları karşılaştırabilirsiniz.
ninjagecko

1
@ninja, mutasyona uğramaz. replace (), str.replace () işlevinin yaptığı gibi yeni bir datetime nesnesi döndürür
John La Rooy

2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

Kullanmayı karşılaştırmalıyım .date(), ancak bu yöntemi, örneğin, her şeyi ay veya dakikaya göre karşılaştırmak, vb. İstemesi durumunda örnek olarak bırakıyorum.

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.