Bagaimana cara memeriksa apakah suatu tanggal adalah hari yang sama dengan datetime.today ()?

89

Kondisi ini selalu mengevaluasi Truemeskipun pada hari yang sama karena membandingkan waktu.

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

Bagaimana saya bisa memeriksa apakah tanggalnya sama dengan datetime.today()?

madprops
sumber

Jawaban:

176

Jika Anda hanya ingin membandingkan tanggal,

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

Atau, tentu saja,

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

Jika Anda ingin memeriksa apakah mereka tanggal yang sama .

Dokumentasi biasanya membantu. Biasanya ini juga merupakan hasil google pertama untuk python thing_i_have_a_question_about. Kecuali pertanyaan Anda adalah tentang fungsi / modul bernama "ular".

Pada dasarnya, datetimemodul memiliki tiga jenis untuk menyimpan suatu titik waktu:

  • date untuk tahun, bulan, hari dalam sebulan
  • time untuk jam, menit, detik, mikrodetik, info zona waktu
  • datetimemenggabungkan tanggal dan waktu. Ini memiliki metode date()dan time()untuk mendapatkan objek datedan terkait time, dan ada combinefungsi praktis untuk menggabungkan datedan timemenjadi datetime.
kebenaran
sumber
3
"Biasanya ini juga merupakan hasil google pertama untuk python thing_i_have_a_question_about" Dan kecuali seseorang membuat entri SO tentang topik ini, seperti yang terjadi di sini :)
mengurangi aktivitas
37
  • Jika Anda hanya perlu membandingkan nilai hari dalam sebulan daripada Anda dapat menggunakan kode berikut:

    if yourdate.day == datetime.today().day:
        # do something
    
  • Jika Anda perlu memeriksa bahwa perbedaan antara dua tanggal dapat diterima, maka Anda dapat menggunakan timedelta :

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • Dan jika Anda ingin membandingkan bagian tanggal saja, Anda dapat menggunakan:

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

Perhatikan bahwa timedelta memiliki format berikut:

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

Jadi, Anda dapat memeriksa perbedaan dalam hari, detik, mdet, menit, dan seterusnya, tergantung pada apa yang Anda perlukan:

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

Dalam kasus Anda, ketika Anda perlu memeriksa bahwa dua tanggal persis sama, Anda dapat menggunakan timedelta (0):

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something
Artsiom Rudzenka
sumber
1
.dayadalah hari dalam sebulan. Jadi, 12 Agustus "sama" dengan 12 Desember menggunakan cuplikan kode pertama Anda. Mungkin itu bukan perilaku yang diinginkan OP.
trutheality
@trutheality - ya, saya mulai menulis jawaban saya sebelum pertanyaan diedit, jadi saya tidak dapat memahami apa yang sebenarnya dia butuhkan, itulah mengapa saya memberikan beberapa opsi untuk ini
Artsiom Rudzenka
1
Catatan singkat: objek datetime memiliki atribut yang disebut 'day' (no 's') dan objek timedelta memiliki atribut yang disebut 'days' (dengan 's') jika orang menemukan dirinya bingung mengapa sintaksnya tidak berfungsi.
Colton Hicks
3

Anda dapat mengatur jam, menit, detik dan mikrodetik sesuai keinginan Anda

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

tetapi jawaban kebenaran mungkin paling baik ketika semuanya menjadi nol dan Anda bisa membandingkannya .date()dengan waktu

Mungkin lebih cepat jika Anda harus membandingkan ratusan datetime karena Anda hanya perlu melakukan replace()panggilan sekali vs ratusan kedate()

John La Rooy
sumber
Saya akan memilih ini jika tidak melibatkan mutasi. Namun Anda dapat menyesuaikan metode ini dengan membuat tiruan objek datetime yang Anda bandingkan, lalu memodifikasinya dengan menghapus bidang dengan resolusi sub-hari, lalu membandingkan salinannya.
ninjagecko
1
@ninja, itu tidak bermutasi. replace () mengembalikan objek datetime baru, seperti yang dilakukan str.replace ()
John La Rooy
2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

Seseorang harus membandingkan penggunaan .date(), tetapi saya meninggalkan metode ini sebagai contoh jika seseorang ingin, misalnya, membandingkan berbagai hal berdasarkan bulan atau menit, dll.

ninjagecko
sumber