2010-12-06 3 views
102

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

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

उत्तर

298

अगर आप दो में जाना जाता दिनांकों के बीच मतभेद की गणना करना चाहते हैं, 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 
+41

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

+0

ऐसे कई बार हैं जहां मुझे लगता है कि यह एक प्रतीत होता है ... गलत परिणाम। एक विभाजित दूसरे अंतर के लिए 59.800 सेकंड। तो, छोटे परिचालनों के लिए, जैसे सेकेंड, मिलीसेकंड, या माइक्रोसेकंड का अंतर, कोई '(बीए)। माइक्रोसॉंड्स 'का उपयोग कर सकता है और फिर सेकंड (1000000) या मिलीसेकंड (1000) –

+0

प्राप्त करने के लिए विभाजित कर सकता है हमेशा सकारात्मक होता है, भले ही ए और बी बदल जाते हैं – Nickpick

24
import time 
current = time.time() 

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

क्या यह आपके लिए काम करेगा?

+1

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

12
>>> from datetime import datetime 

>>> a = datetime.now() 

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

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

,

मैं datetime.datetime, काफी उपयोगी होने के लिए नहीं है, इसलिए यदि एक जटिल या अजीब परिदृश्य है कि आप का सामना किया है लगता है कृपया (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' को वापस करते हैं, तो यह कई दिनों के लिए सही है;) – Wolph

+5

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

+2

वास्तव में, जवाब सही नहीं है और @ डेविडवॉल्वर टिप्पणी को प्रतिबिंबित करना चाहिए। सही उत्तर है: 'timedelta.total_seconds()' का उपयोग करें। तदनुसार downvoted। – astrojuanlu

8

हम समारोह total_sec है onds() पायथन 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) 
-2
>>> import datetime 

>>> d1 = datetime.datetime.now() 

>>> d2 = datetime.datetime.now() 

>>> d=d2 - d1 

>>> d.seconds