Bagaimana cara membandingkan dua tanggal?


381

Bagaimana saya membandingkan dua tanggal untuk melihat mana yang lebih baru, menggunakan Python?

Misalnya, saya ingin memeriksa apakah tanggal saat ini sudah melewati tanggal terakhir dalam daftar yang saya buat, tanggal liburan, sehingga akan mengirim email secara otomatis, memberitahu admin untuk memperbarui file holiday.txt.


20
Eh, Anda menggunakan <dan >operator, sama seperti dengan perbandingan lainnya.
Daniel Roseman

12
@JohnMachin: Anda menulis fungsi dengan prototipe int compare_dates(void const *, void const*), melemparkan argumen ke struct Date *dan mengimplementasikan logika perbandingan. Mungkin tidak jelas bagi pendatang baru Python.
Fred Foo

1
@ larsmans: Maaf .... s / any_language / any_reasonable_language / dan siapa pun yang terbiasa dengan bahasa yang tidak masuk akal harus menghabiskan beberapa menit membaca dokumen dan mencoba date1 <date2
John Machin

2
docs.python.org/library/datetime.html#datetime-objects pencarian Ctrl-F untuk "Operasi yang didukung"
John Machin

1
@Galaxy - dia menggunakan analogi, untuk menunjukkan bahwa apa yang seharusnya sederhana untuk orang yang berpengalaman mungkin tidak mudah untuk pemula total dan dia menggunakan C untuk menggambarkan ini. Dia tidak berpikir pertanyaannya adalah tentang C. Dan dia benar, saya adalah seorang pemula pada saat saya menanyakan pertanyaan ini hampir 8 tahun yang lalu, dan tidak tahu bagaimana cara kerjanya.
Cecil Rodriguez

Jawaban:


496

Gunakan datetimemetode dan operator <dan kerabatnya.

>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)

19
Ini berfungsi untuk nilai sadar zona waktu juga, jika ada yang bertanya-tanya.
Mat Gessel

2
Apa bedanya antara pastdan present? Saya tidak dapat memahami contoh Anda dan hasilnya tidak masuk akal.
Emadpres

19
@Emadpres: bayangkan ini diketik secara manual. Baris yang lalu diketik terlebih dahulu, sedangkan baris yang sekarang diketik yang kedua ... jadi baris yang lalu dimasukkan terlebih dahulu, jadi yang lalu <present is True.
ramcdougal

2
Mengutip dari dokumen: "Jika satu pembanding adalah naif dan yang lainnya sadar, TypeError dinaikkan jika perbandingan pesanan dilakukan. Untuk perbandingan kesetaraan, contoh naif tidak pernah sama dengan contoh yang diwaspadai. Jika kedua pembanding sadar, dan memiliki yang sama Atribut tzinfo, atribut tzinfo umum diabaikan dan basis data dibandingkan. Jika kedua pembanding mengetahui dan memiliki atribut tzinfo yang berbeda, perbandingan pertama kali disesuaikan dengan mengurangi offset UTC mereka (diperoleh dari self.utcoffset ()). "
Vikas Prasad

2
Nama variabel harus pastdan past_but_a_little_after. Secara teknis, presentjuga di masa lalu ketika perbandingan past < presentdibuat.
grisaitis

75

Menggunakan time

Katakanlah Anda memiliki tanggal awal sebagai string seperti ini:
date1 = "31/12/2015"
date2 = "01/01/2016"

Anda dapat melakukan hal berikut:
newdate1 = time.strptime(date1, "%d/%m/%Y")dan newdate2 = time.strptime(date2, "%d/%m/%Y")mengubahnya menjadi format tanggal python. Kemudian, perbandingannya jelas:

newdate1 > newdate2akan kembali False
newdate1 < newdate2akan kembaliTrue


40

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)akan kembali True.

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)akan kembali datetime.timedelta(-1).

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)akan kembali datetime.timedelta(1).

lihat dokumen .


3

Jawaban lain menggunakan datetimedan perbandingan juga berfungsi hanya untuk waktu, tanpa tanggal.

Misalnya, untuk memeriksa apakah saat ini kurang lebih dari jam 8:00 pagi, kita dapat menggunakan:

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date

Dan kemudian dibandingkan dengan:

datetime.datetime.now().time() > eight_am  

yang akan kembali True


-1

Untuk menghitung hari dalam dua perbedaan tanggal, dapat dilakukan seperti di bawah ini:

import datetime
import math

issuedate = datetime(2019,5,9)   #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine  #you want change

if diff_date.total_seconds() > 0.0:   #its matching your condition
    days = math.ceil(diff_date.total_seconds()/86400)  #calculate days (in 
    one day 86400 seconds)
    deductable_amount = round(amount,2)*days #calclulated fine for all days

Karena jika satu detik lebih dari tanggal jatuh tempo maka kita harus menagih


Tidak menjawab pertanyaan.
Willwsharp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.