दो तिथियों की तुलना कैसे करें?


379

मैं दो तिथियों की तुलना यह देखने के लिए कैसे करूंगा कि बाद में, पायथन का उपयोग कर रहा है?

उदाहरण के लिए, मैं यह जांचना चाहता हूं कि क्या इस तारीख को मैं इस सूची में आखिरी तारीख से पहले हूं, जो मैं बना रहा हूं, छुट्टी की तारीखें।


20
ईआर, आप किसी भी अन्य तुलना के साथ की तरह <और >ऑपरेटरों का उपयोग करते हैं ।
डैनियल रोज़मैन

12
@ जॉनमोचिन: आप प्रोटोटाइप के साथ एक फंक्शन लिखते हैं int compare_dates(void const *, void const*), दोनों तर्कों struct Date *की तुलना करते हैं और तुलना लॉजिक को लागू करते हैं। यह एक पायथन नवागंतुक के लिए स्पष्ट नहीं हो सकता है।
फ्रेड फू

1
@ लार्समैन: क्षमा करें .... s / any_language / any_reasonable_language / और किसी को भी अनुचित भाषा का उपयोग करने वाले डॉक्स के लिए कुछ मिनट बिताने चाहिए और दिनांक 1 की कोशिश करनी चाहिए <date2
जॉन

2
docs.python.org/library/datetime.html#datetime-object "समर्थित संचालन" के लिए Ctrl-F खोज
जॉन मैकिन

1
@ गैलेक्सी - वह एक सादृश्य का उपयोग कर रहा है, यह दिखाने के लिए कि एक अनुभवी व्यक्ति को क्या सरल होना चाहिए जो कुल शुरुआत के लिए सरल नहीं हो सकता है और वह सी का उपयोग कर रहा है। उन्हें नहीं लगता कि सवाल सी। के बारे में है और वह सही था, मैं लगभग 8 साल पहले यह सवाल पूछने वाले समय में कुल शुरुआत करने वाला था, और इसका कोई सुराग नहीं था कि इसमें से किसी ने कैसे काम किया।
सेसिल रोड्रिगेज

जवाबों:


494

datetimeविधि और ऑपरेटर <और उसके परिजनों का उपयोग करें ।

>>> 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
यह टाइमजोन-जागरूक मूल्यों के लिए भी काम करता है, अगर कोई सोच रहा था।
मैट गेसेल

2
क्या अलग है pastऔर present? मैं आपके उदाहरण को नहीं समझ सकता और इसका परिणाम समझ में नहीं आता है।
Emadpres

19
@ एडमंड्स: कल्पना करें कि यह मैन्युअल रूप से टाइप किया गया था। पिछली लाइन को पहले टाइप किया गया था, जबकि वर्तमान लाइन को दूसरा टाइप किया गया था ... इसलिए पिछली लाइन को पहले दर्ज किया गया था, इसलिए अतीत <वर्तमान सही है।
रामचौडगल

2
डॉक्टर से उद्धृत करते हुए: "यदि एक तुलना भोली है और दूसरा जागरूक है, तो ऑर्डर तुलना की कोशिश करने पर TypeError को उठाया जाता है। समानता तुलना के लिए, भोले उदाहरण कभी भी जागरूक उदाहरणों के बराबर नहीं होते हैं। यदि दोनों समानताएं जानते हैं, और समान हैं। tzinfo विशेषता, सामान्य tzinfo विशेषता को अनदेखा किया जाता है और आधार डेटाटाइम्स की तुलना की जाती है। यदि दोनों तुलनाओं के बारे में पता है और अलग-अलग tzinfo विशेषताएँ हैं, तो तुलनाओं को पहले उनके UTC ऑफसेट (self.utcoffset ()) से प्राप्त) को घटाकर समायोजित किया जाता है। "
विकास प्रसाद

2
चर नाम pastऔर होने चाहिए past_but_a_little_after। तकनीकी रूप से, presentअतीत में भी है जब तुलना की past < presentजाती है।
ग्राइसीटिस

74

उपयोग time

मान लीजिए कि आपके पास तार की तरह प्रारंभिक तिथियां हैं:
date1 = "31/12/2015"
date2 = "01/01/2016"

आप निम्न कार्य कर सकते हैं:
newdate1 = time.strptime(date1, "%d/%m/%Y")और newdate2 = time.strptime(date2, "%d/%m/%Y")उन्हें अजगर की तिथि प्रारूप में परिवर्तित कर सकते हैं । फिर, तुलना स्पष्ट है:

newdate1 > newdate2वापस आ False
newdate1 < newdate2जाएगीTrue


39

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)वापस आ जाएगा True

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)वापस आ जाएगा datetime.timedelta(-1)

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)वापस आ जाएगा datetime.timedelta(1)

डॉक्स देखें ।


3

उपयोग करने datetimeऔर तुलना करने वाले अन्य उत्तर भी बिना किसी तिथि के केवल समय के लिए काम करते हैं।

उदाहरण के लिए, यह जाँचने के लिए कि अभी यह 8:00 बजे से अधिक है या नहीं, हम उपयोग कर सकते हैं:

import datetime

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

और बाद में तुलना करें:

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

जो लौटेगा True


-1

दो तिथियों के अंतर में दिनों की गणना के लिए, नीचे जैसा किया जा सकता है:

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

Beuase यदि नियत तारीख के साथ एक सेकंड अधिक है तो हमें चार्ज करना होगा


सवाल का जवाब नहीं देता।
विल्वशर्प
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.