2010-05-13 6 views
5

मैं दो दिनांक के बीच का अंतर (सेकंड में) की गणना करने के कोशिश कर रहा हूँ/बार निम्नलिखित के रूप में स्वरूपित:पायथन में अलग-अलग समय क्षेत्रों में समय के बीच अंतर कैसे मिलता है?

2010-05-11 17:07:33 यूटीसी

2010-05-11 17:07:33 EDT

time1 = '2010-05-11 17:07:33 UTC' 
time2 = '2010-05-11 17:07:33 EDT' 
delta = time.mktime(time.strptime(time1,"%Y-%m-%d %H:%M:%S %Z"))-\ 
     time.mktime(time.strptime(time2, "%Y-%m-%d %H:%M:%S %Z")) 
समस्या मुझे मिल गया

EDT मान्यता प्राप्त नहीं है है, विशिष्ट त्रुटि है pytz दुनिया समय क्षेत्र

ValueError: time data '2010-05-11 17:07:33 EDT' does not match format '%Y-%m-%d %H:%M:%S %Z' 
+2

आप इस http://labix.org/python-dateutil लिए देख रहे हैं:

यहाँ उन्हें एक साथ उपयोग करने का एक नमूना है? यह जो भी हो रहा है उससे कहीं अधिक सरल हो सकता है। –

+0

उत्तर के लिए धन्यवाद। लेकिन यहां तक ​​कि pytz का उपयोग करके भी मैं स्ट्रिंग 'ईडीटी' इत्यादि को पार्स करने के लिए एक बेहतर तरीका नहीं समझ पाया और इसे पायट्ज़ के ओबीजे में परिवर्तित कर सकता हूं, टाइमज़ोन कोई 3-4 अक्षर स्ट्रिंग संक्षेप हो सकता है लेकिन pytz 'यूएस/पूर्वी' । क्या मुझे संक्षेप में 'यूएस/पूर्वी' प्रारूप में बदलने के लिए मैपिंग बनाने की आवश्यकता है? यह मेरे लिए बहुत ज्यादा लगता है। धन्यवाद, – JasonA

+1

मैं अंत की तरह प्रविष्टियों के साथ एक पाठ फ़ाइल के निर्माण के निम्नलिखित: << EDT \t पूर्वी डेलाइट समय (उत्तरी अमेरिका) \t यूटीसी-04 >> फिर स्ट्रिंग का उपयोग प्रवेश के लिए खोज 'EDT' समय स्ट्रिंग फ़ाइल से मूल्य -04 का उपयोग करके मैं सेकंड में समय अंतर प्राप्त करने के लिए mktime() का उपयोग कर सकता हूं। मुझे अभी भी लगता है कि ऐसा करने का एक आसान तरीका होना चाहिए ... धन्यवाद, – JasonA

उत्तर

8

चेक आउट परिभाषा पुस्तकालय।

यह लाइब्रेरी पायथन 2.3 या उच्चतम का उपयोग करके सटीक और क्रॉस प्लेटफार्म टाइमज़ोन गणनाओं की अनुमति देता है। यह डेलाइट बचत के अंत में संदिग्ध समय के मुद्दे को भी हल करता है, जिसे आप पाइथन लाइब्रेरी संदर्भ (डेटाटाइम.tzinfo) में और अधिक पढ़ सकते हैं।

यह tz database, जो EDT को शामिल करना चाहिए का लाभ लेता है, और आप गणना आप के लिए (और शायद अधिक मज़बूती & सही रूप में आपके वर्तमान कार्यान्वयन की तुलना में) की जरूरत है प्रदर्शन करने के लिए अनुमति देते हैं।

+1

+1 क्योंकि 'pytz' मधुमक्खी का घुटनों है। – jathanism

0

डॉक्स से के लिए% जेड निर्देश के लिए strptime

समर्थन tzname में निहित मूल्यों पर और कि क्या दिन के उजाले सच है आधारित है। की वजह से, यह यूटीसी और जीएमटी को पहचानने के लिए को छोड़कर प्लेटफार्म-विशिष्ट है जो हमेशा ज्ञात है (और गैर-डेलाइट बचत समय क्षेत्र माना जाता है)।

10

pytz के अतिरिक्त, python-dateutil देखें। relativedelta कार्यक्षमता बकाया है।

from datetime import datetime 

from dateutil.relativedelta import * 
import pytz 

if __name__ == '__main__': 
    date_one = datetime.now(pytz.timezone('US/Eastern')) 
    date_two = datetime.now(pytz.timezone('US/Mountain')) 
    rdelta = relativedelta(date_one, date_two) 
    print(rdelta) 
+0

यह झूठा है ... relativedelta टाइमज़ोन के लिए खाता नहीं है।मैंने अभी कोशिश की और यह मुझे लंदन और पेरिस के बीच 2 सेकंड अंतर देता है (2secs = जिस समय मुझे फ़ंक्शन टाइप करने की आवश्यकता होती है) – dgan