समयावधि को कुल सेकंड में परिवर्तित करें


185

मेरे पास समय का अंतर है

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1

अब, मैं कुल कितने सेकंड का पता लगा सकता हूँ जो पारित हुआ? diff.secondsदिनों की गिनती नहीं है। मैं कर सकता था:

diff.seconds + diff.days * 24 * 3600

क्या इसके लिए एक अंतर्निहित विधि है?


8
@RestRisiko - आप सही कह रहे हैं। फिर भी, स्टैक ओवरफ्लो पर सवाल करना उपयोगी है, इसलिए अगली बार मुझे, या किसी और को, इसके लिए Googles, उसके पास शीर्ष परिणाम के रूप में एक अच्छा जवाब है।
ripper234

हम बाद में "अच्छा" की वैकल्पिक परिभाषा पर चर्चा कर सकते हैं; कृपया मेरे उत्तर को पढ़ने से पहले आप भाग जाएं :)
जॉन माचिन

कंप्यूटिंग के साथ time1, और diffआपके कोड में कई समस्याएं हैं । एक भोली डेटाइम ऑब्जेक्ट के रूप में वर्तमान utc समय प्राप्त करने के लिए, datetime.utcnow()इसके बजाय का उपयोग करें । यह समझने के लिए कि अंतर को खोजने के लिए आपको स्थानीय समय के बजाय यूटीसी का उपयोग क्यों करना चाहिए पता लगाएं कि क्या डेटाटाइम्स - पायथन के बीच 24 घंटे बीत चुके हैंtime.monotonic()घटनाओं ( time.time()या के बजाय datetime.utcnow()) के बीच बीता समय खोजने के लिए बेहतर हो सकता है ।
JFS

जवाबों:


382

का उपयोग करें timedelta.total_seconds()

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0

26
अजगर 2.7 में नया
इवगेनी

7
अगर किसी को अभी भी 2.6 के साथ संगत होने की आवश्यकता है: खुद को नई विधि के साथ datetime.timedelta का विस्तार करने के लिए stackoverflow.com/questions/3318348/… देखें ।
उवे ग्यूडर

6
Python3.6 में datetime.timedelta.total_seconds (time2
रुसो

8

आपको अपनी datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))अभिव्यक्ति के साथ एक तरीका या दूसरा समस्या है ।

(1) यदि आप सभी की जरूरत दो सेकंड में अंतर है, तो बहुत ही सरल time.time()काम करता है।

(2) यदि आप अन्य कार्यों के लिए उन टाइमस्टैम्प का उपयोग कर रहे हैं, तो आपको यह विचार करने की आवश्यकता है कि आप क्या कर रहे हैं, क्योंकि परिणाम में बड़ी गंध है:

gmtime()UTC में एक समय टपल लौटाता है लेकिन स्थानीय समयmktime() में एक समय टपल की अपेक्षा करता है।

मैं ऑस्ट्रेलिया के मेलबर्न में हूं, जहां मानक टीबी UTC + 10 है, लेकिन कल सुबह तक डेलाइट सेविंग अभी भी लागू है, इसलिए यह UTC / 11 है। जब मैंने निम्नलिखित को निष्पादित किया, तो यह 2011-04-02T20: 31 स्थानीय समय यहाँ था ... UTC 2011-04-02T09: 31 था

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

आप देखेंगे कि t3, आपकी अभिव्यक्ति का परिणाम UTC + 1 है, जो UTC + (मेरा स्थानीय DST अंतर) प्रतीत होता है ... बहुत सार्थक नहीं है। आपको यह उपयोग करने पर विचार करना चाहिए datetime.datetime.utcnow()जो डीएसटी / बंद होने पर एक घंटे तक नहीं कूदेंगे और आपको इससे अधिक सटीक दे सकते हैंtime.time()


स्पष्टीकरण के लिए धन्यवाद। जिस उद्देश्य के लिए मैं अभी उपयोग कर रहा हूं, हर घंटे और फिर कुछ घंटों का अंतर महत्वपूर्ण नहीं है, लेकिन जब मैं कुछ और सार्थक लिखूंगा तो भविष्य में इसकी जांच करना सुनिश्चित करूंगा।
ripper234

-7

आप mx.DateTime मॉड्यूल का उपयोग कर सकते हैं

import mx.DateTime as mt

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