2011-11-15 52 views
208

Làm cách nào để so sánh hai ngày để xem cái nào sau này, sử dụng Python? Ví dụ, tôi muốn kiểm tra xem ngày hiện tại đã qua ngày cuối cùng trong danh sách này tôi đang tạo, ngày nghỉ, sao cho nó sẽ tự động gửi email, yêu cầu quản trị viên cập nhật tệp holiday.txt .Cách so sánh hai ngày?

+10

Er, bạn gõ '<' and '> 'khai thác, giống như với bất kỳ so sánh khác. –

+10

@JohnMachin: bạn viết một hàm với nguyên mẫu 'int compare_dates (void const *, void const *)', đưa cả hai đối số vào 'struct Date *' và thực hiện logic so sánh. Nó có thể không được rõ ràng cho một người mới Python. –

+1

@larsmans: Xin lỗi .... s/any_language/any_reasonable_language/và bất kỳ ai đã từng sử dụng ngôn ngữ không hợp lý nên dành vài phút cho mỗi lần sử dụng tài liệu và thử ngày1

Trả lời

267

Sử dụng phương thức datetime và nhà điều hành < và thân nhân của họ.

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

Điều này cũng phù hợp với các giá trị nhận biết múi giờ, nếu có ai thắc mắc. –

+9

Tên biến tuyệt vời! – Himanshu

+0

Điểm khác biệt giữa 'quá khứ' và 'hiện tại' là gì? Tôi không thể hiểu ví dụ của bạn và kết quả của nó không có ý nghĩa. – Emadpres

30

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2) sẽ trả lại True.

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2) sẽ trả lại datetime.timedelta(-1).

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2) sẽ trả lại datetime.timedelta(1).

xem docs.

39

Sử dụng time

Hãy nói rằng bạn có những ngày ban đầu như dây đàn như thế này:
date1 = "31/12/2015"
date2 = "01/01/2016"

Bạn có thể làm như sau:
newdate1 = time.strptime(date1, "%d/%m/%Y")newdate2 = time.strptime(date2, "%d/%m/%Y") để chuyển đổi chúng sang định dạng ngày của python . Sau đó, so sánh là rõ ràng:

newdate1 > newdate2 sẽ trở lại False
newdate1 < newdate2 sẽ trở lại True