मैं दो तिथियों के बीच, सेकंड में, अंतर की जांच कैसे करूं?


181

ऐसा करने का एक आसान तरीका होना चाहिए। मेरे पास ऐसी वस्तुएं हैं जो हर बार ताज़ा हो जाना चाहती हैं, इसलिए मैं रिकॉर्ड करना चाहती हूं जब वे बनाए गए थे, तो वर्तमान टाइमस्टैम्प के खिलाफ जांच करें, और आवश्यकतानुसार ताज़ा करें।

datetime.datetime मुश्किल साबित हुआ है, और मैं समय पुस्तकालय में गोता नहीं लगाना चाहता। क्या इस तरह की चीज़ के लिए कुछ आसान है?

जवाबों:


517

यदि आप दो ज्ञात तिथियों के बीच अंतर की गणना करना चाहते हैं total_seconds, तो इस तरह का उपयोग करें:

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

0


95
`नोट’ सबसे महत्वपूर्ण हिस्सा है जिसे लोग याद करते हैं। काश मैं उस पर एक और वोट दे सकता।
Dexter

ऐसे समय होते हैं जहां मैं नोटिस करता हूं कि यह एक प्रतीत होता है ... गलत परिणाम। एक दूसरे अंतर के लिए 59.800 सेकंड। इसलिए, छोटे ऑपरेशनों के लिए, जैसे कि सेकंड, मिलीसेकंड या माइक्रोसेकंड का अंतर, कोई भी उपयोग कर सकता है (b-a).microsecondsऔर फिर विभाजित कर सकता है कि सेकंड (1000000) या मिलीसेकंड (1000) प्राप्त करने के लिए
Zld Productions

ऐसा प्रतीत होता है कि मान हमेशा सकारात्मक होता है, यहां तक ​​कि जब ए और बी की अदला
Nickpick

@Nickpick मान हमेशा सकारात्मक नहीं होता है। जैसे निम्नलिखित है -60:from datetime import datetime; (datetime(2019, 1, 1, 0, 0) - datetime(2019, 1, 1, 0, 1)).total_seconds()
JDiMatteo

प्रभावशाली समाधान! फ़ंक्शन बनाने के लिए स्वच्छ कोड आवश्यक नहीं है।
पाउलो ज़ोइ ज़ु ल्लू फ़्राबिसीओ

36
import time  
current = time.time()

...job...
end = time.time()
diff = end - current

क्या वह काम तुम्हारे लिये होगा?


1
+1; हम वास्तव में या तो आह्वान की तारीख की परवाह नहीं करते हैं - हम बीते हुए समय की परवाह करते हैं। तो बस एक कच्चे टाइमस्टैम्प का उपयोग करें, जैसा कि दिखाया गया है।
कार्ल Knechtel

14
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7 समय जितना भी आपने थोड़ा इंतजार किया होगा)

मुझे डेटाइमटाइम लाइफटाइम काफी उपयोगी लगता है, इसलिए यदि आपके सामने कोई जटिल या अजीब परिदृश्य है, तो कृपया हमें बताएं।

संपादित करें: यह इंगित करने के लिए @WoLpH के लिए धन्यवाद कि कोई व्यक्ति हमेशा जरूरी नहीं है कि वह इतनी बार ताज़ा हो जाए कि डेटाटाइम एक साथ बंद हो जाए। डेल्टा में दिनों के लिए लेखांकन करके, आप लंबे समय की विसंगतियों को संभाल सकते हैं:

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800

1
यदि आप d.seconds + d.days * 86400इसके बजाय लौटते हैं, तो यह कई दिनों के लिए सही होता है;)
वोल्फ

7
ध्यान दें, सामान्य मामले में, यह सही नहीं है । मामले पर विचार करें a - b, जहां aहै से पहले b (यानी, तो परिणाम नकारात्मक हो जाएगा): (a - b).seconds == 86282जबकि a - b == datetime.timedelta(-1, 86276, 627665)। सही विधि, मेरा मानना ​​है कि इसका उपयोग करना है timedelta.total_seconds()... लेकिन यह केवल py2.7 + है।
डेविड वोलेवर

4
वास्तव में, उत्तर सही नहीं है और @DavidWolever टिप्पणी को प्रतिबिंबित करना चाहिए। सही उत्तर है: उपयोग करें timedelta.total_seconds()। उसी के अनुसार घटाया गया।
एस्ट्रोजूनलू

3
पायथन 2.6 जवाब के लिए अपवोट किया गया। total_seconds()एक 2.7+ फीचर है।
जो होलोवे

@ जोहालोय मेरा अनुमान है कि यह पायथन 2.6 में भी सही ढंग से काम नहीं कर रहा है।
zen11625

12

हमारे पास Py_on 2.7 के साथ फंक्शन__सेकंड () है। कृपया अजगर 2.6 के लिए कोड देखें

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)

0

यहाँ वह है जो मेरे लिए काम कर रहा है।

from datetime import datetime

date_format = "%H:%M:%S"

# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00') 
time_end = str('18:00:00')

# Then get the difference here.    
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)

# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

उम्मीद है की यह मदद करेगा!

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