2013-02-25 50 views
6

में दो बार के बीच अंतर की गणना करें मैं पाइथन का उपयोग कर रहा हूं, और दो बार के बीच अंतर की गणना करना चाहता हूं।पायथन

असल में मैं संगठनों में लॉगिन और लॉगआउट बार, उदाहरण के लिए के बीच अंतर की गणना करने के परिदृश्य काम के घंटे के लिए कुछ विशेष सीमा नहीं है, इसलिए था सुबह 9:00 AM पर और यदि कोई उपयोगकर्ता लॉगिन वह 6:00 PM पर लॉग आउट शाम को, हमें गणना करने की आवश्यकता है कि वह कार्यालय में कितनी अवधि में रहा (जो वर्तमान परिदृश्य में 9 hours है), लेकिन मैं इसे पायथन में करना चाहता हूं, तो क्या कोई मुझे बता सकता है कि उपरोक्त अवधारणा को कैसे प्राप्त किया जाए लॉगिन और लॉगआउट के समय के बीच अंतर की गणना?

+0

आप दो डाइम * डेल्टास * के बीच अंतर की गणना कर रहे हैं, समय में दो बिंदु नहीं?! –

+1

डेल्टा = परिवर्तन, आप – Gjordis

+0

के समय में बदलावों की तुलना कर रहे हैं, लेकिन मेरी अवधारणा लॉग इन की समय अवधि और लॉगआउट समय की गणना कर रही है वास्तव में – Fedrik

उत्तर

19
>>> start = datetime.datetime(year=2012, month=2, day=25, hour=9) 
>>> end = datetime.datetime(year=2012, month=2, day=25, hour=18) 
>>> diff = end - start 
>>> diff 
datetime.timedelta(0, 32400) 
>>> diff.total_seconds() 
32400 
>>> diff.total_seconds()/60/60 
9 
>>> 
+1

आप एक अच्छा प्रारूप प्राप्त करने के लिए diff.seconds/60/60 के बजाय 'str (dif) 'प्रिंट कर सकते हैं। –

+1

यदि आप एक दिन से अधिक के लिए लॉग इन हैं, तो आप 'diff.total_seconds()' –

+0

का उपयोग करना चाहेंगे, हम यहां घंटे का मूल्य कैसे प्रदान कर सकते हैं उदाहरण के लिए उपयोगकर्ता 9 बजे लॉग इन होता है और 6 पीएम पर लॉग आउट करता है? – Fedrik

1

आप पहली जगह में समय का प्रतिनिधित्व करने के लिए गलत कक्षाओं का उपयोग कर रहे हैं।

> import datetime 
> print datetime.datetime.now() - datetime.datetime(2013, 1, 1) 
55 days, 14:11:06.749378 

लौटे वस्तु एक timedelta है। लेकिन अंतर datetime वस्तुओं के बीच निश्चित रूप से गणना की जाती है। इस कार्य के लिए

3

उपयोग divmod

>>> start = datetime.datetime.utcnow() 
>>> end = datetime.datetime.utcnow() 
>>> divmod(end - start, 60) 
(0, 2.454) # (minutes, seconds) 

divmod

+0

divmod() मिनटों और घंटों में आवश्यक समय में समय सेकंड को बदलने के लिए बहुत उपयोगी है। –

+3

divmod डेटाटाइम या timedelta वस्तुओं का समर्थन नहीं करता है। आपको end.seconds और start.seconds का उपयोग करने की आवश्यकता है –

2

दे देंगे मेरी राय @ फेबियन के जवाब में शायद सबसे अच्छा है। लेकिन क्या हम इसे और अधिक कठिन बना रहे हैं?

क्या आपको इसे दिन, महीने, वर्ष के अनुसार गणना करने की आवश्यकता है?

यदि आप इसे उत्पन्न कर रहे हैं, तो क्या एक timesec प्रतिनिधित्व का उपयोग करना आसान नहीं होगा?

जब में एक उपयोगकर्ता के लॉगिन:

user_login_time = time.time() 

जब उपयोगकर्ता फिर से देखता है:

time_difference = time.time() - user_login_time 

फिर अगर time_difference XXXX सेकंड से ऊपर है देखने के लिए जाँच? अब मैं मान रहा हूं कि आप यह जांचने जा रहे हैं कि उपयोगकर्ता XX मिनट या xx घंटों में लॉग इन नहीं हुआ है या नहीं?

अन्यथा, मुझे तनाव होगा कि अगर आप समय की तारों को पार्सिंग कर रहे हैं, या डेटा के साथ अन्य समय/दिनांक कार्यों को करने की आवश्यकता है तो मुझे फ़ैशन का जवाब सबसे अच्छा होगा।

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

लेकिन यदि आप बस यह पता लगाने की कोशिश कर रहे हैं कि उपयोगकर्ता पिछले 30 मिनट के भीतर रहा है, तो यह आसान हो सकता है।