2009-10-21 7 views
10

मैंने डेस्कटॉप एप्लिकेशन लिखा था और टाइमस्टैम्पिंग के लिए datetime.datetime.utcnow() का उपयोग कर रहा था, हालांकि मैंने हाल ही में देखा है कि एप्लिकेशन का उपयोग करने वाले कुछ लोग एक ही समय में प्रोग्राम चलाते समय मुझसे अलग-अलग परिणाम प्राप्त करते हैं। क्या वेबसाइट से इसे लाने के लिए urllib का उपयोग किए बिना स्थानीय रूप से यूटीसी समय प्राप्त करने का कोई तरीका है?मैं पाइथन के साथ एक सटीक यूटीसी समय कैसे प्राप्त कर सकता हूं?

उत्तर

20

पायथन अंतर्निहित ऑपरेटिंग सिस्टम पर निर्भर करता है ताकि सटीक समय-समय पर घड़ी प्रदान की जा सके। यदि यह ऐसा नहीं कर रहा है, तो आपके पास ओ/एस को बाईपास करने के अलावा अन्य विकल्प नहीं हैं। एनटीपी क्लाइंट here का शुद्ध-पायथन कार्यान्वयन है। एक बहुत ही सरल दिमाग दृष्टिकोण:

>>> import ntplib,datetime 
>>> x = ntplib.NTPClient() 
>>> datetime.datetime.utcfromtimestamp(x.request('europe.pool.ntp.org').tx_time) 
datetime.datetime(2009, 10, 21, 7, 1, 54, 716657) 

हालांकि, यह बहुत लगातार वहाँ बाहर अन्य एनटीपी सर्वर पर मार होना अच्छा नहीं होगा। एक अच्छा नेट नागरिक ओटीएस सिस्टम घड़ी के बीच ऑफ़सेट का ट्रैक रखने के लिए एनटीपी क्लाइंट लाइब्रेरी का उपयोग करेगा और सर्वर से प्राप्त होता है और समय को समायोजित करने के लिए केवल समय-समय पर मतदान करता है।

+0

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

+2

यह अनुरोध करने के "राउंड-ट्रिप-टाइम" के लिए जिम्मेदार नहीं है। आप जो करना चाहते हैं वह 'time.clock()' का उपयोग करने के लिए 'एनटीपी क्लाइंट()' का जवाब देने में कितना समय लगता है, इसे आधा विभाजित करें और उस समय में जोड़ें। यह सही है। –

7

वास्तव में, एनटीप्लिब राउंड-ट्रिप विलंब के लिए इस ऑफसेट एकाउंटिंग की गणना करता है। यह एनटीपी प्रतिक्रिया की "ऑफ़सेट" विशेषता के माध्यम से उपलब्ध है। इसलिए परिणाम बहुत जंगली नहीं होना चाहिए।

+1

यह एक उपयोगी टिप्पणी है लेकिन यह एक उत्तर नहीं है। आपको इसे उपरोक्त टिप्पणियों में ले जाना चाहिए। – jfs

+0

मुझे लगता है कि यह इस तरह का उत्तर प्रदान करता है कि ओपी (जंगली रूप से अलग-अलग परिणाम) का अवलोकन गलत हो सकता है। और कोई भी परमाणु घड़ी के बिना स्थानीय रूप से यूटीसी समय कैसे प्राप्त करना चाहता है? – Trilarion

+0

@Trilarion: मुझे कुछ असामान्य नहीं दिखता है कि अलग-अलग कंप्यूटर अलग-अलग समय लौटते हैं। यहां तक ​​कि [अगर समय एनटीपी का उपयोग कर सिंक्रनाइज़ किया गया है; यह इंटरनेट पर मिलीसेकंड के दसियों से भिन्न हो सकता है] (http://stackoverflow.com/a/97939/4279)। यूटीसी समय प्राप्त करने के लिए आपको स्थानीय परमाणु घड़ी की आवश्यकता नहीं है (जिसे वास्तविक समय में ज्ञात नहीं है, यदि आप नैनोसेकंड परिशुद्धता के दसियों चाहते हैं) मिलिओ-माइक्रोसॉन्ड परिशुद्धता के साथ, आप जीपीएस का उपयोग कर सकते हैं (उदाहरण के लिए, उसी एनटीपी सॉफ्टवेयर के माध्यम से)। पैमाने के लिए: [सापेक्ष प्रभाव प्रति दिन माइक्रोसॉन्ड हैं] (http://www.astronomy.ohio-state.edu/~pogge/Ast162/Unit5/gps.html) – jfs

संबंधित मुद्दे

 संबंधित मुद्दे