क्या time.time()
पायथन समय मॉड्यूल सिस्टम के समय या यूटीसी में समय लौटाता है?
क्या time.time()
पायथन समय मॉड्यूल सिस्टम के समय या यूटीसी में समय लौटाता है?
जवाबों:
time.time()
समारोह, अवधि के बाद सेकंड की संख्या रिटर्न सेकंड के रूप में। ध्यान दें कि "युग" को 1 जनवरी, 1970 को यूटीसी में शुरू किया गया। तो युग यूटीसी के संदर्भ में परिभाषित किया गया है और समय में एक वैश्विक क्षण स्थापित करता है। कोई फर्क नहीं पड़ता कि आप "सेकंड पिछले युग" (time.time ()) एक ही समय में एक ही मान लौटाते हैं।
यहाँ कुछ नमूना आउटपुट है जो मैंने अपने कंप्यूटर पर चलाया, इसे एक स्ट्रिंग में परिवर्तित किया।
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>
ts
चर समय सेकंड में लौट आए है। फिर मैंने इसे datetime
लाइब्रेरी में इस्तेमाल करके स्ट्रिंग में बदल दिया, यह एक स्ट्रिंग है जो मानव पठनीय है।
import time
जब हम मूल रूप से आपको टाइमस्टैम्प देते हैं तो हमें क्यों करना चाहिए । बस मिलीसेकंड निकालें -str(datetime.datetime.now()).split('.')[0]
time.time()
किसी भी समयक्षेत्र में नहीं है । "सेकंड के बाद से युग" एक शब्द है; यह कुछ समय (कुछ समय) के बाद से बीता हुआ सेकंड नहीं है । आप इसे अपने स्थानीय समय (tz डेटाबेस के साथ) और / या UTC टाइमज़ोन में आसानी से परिवर्तित कर सकते हैं। btw, यदि आप .strftime()
परिणाम को छोड़ देते हैं (लगभग) वही (+/- माइक्रोसेकंड)।
यह टाइमस्टैम्प के टेक्स्ट फॉर्म के लिए है लिए है जिसका उपयोग आपकी टेक्स्ट फ़ाइलों में किया जा सकता है। (प्रश्न का शीर्षक अतीत में अलग था, इसलिए इस उत्तर के लिए परिचय को यह स्पष्ट करने के लिए बदल दिया गया था कि इसे समय के रूप में कैसे व्याख्या किया जा सकता है। [अद्यतन 2016-01-14])
आप का उपयोग कर एक स्ट्रिंग के रूप टाइमस्टैम्प प्राप्त कर सकते हैं .now()
या .utcnow()
की datetime.datetime
:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
now
अलग से utcnow
अपेक्षा के अनुरूप - अन्यथा वे उसी तरह काम:
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
आप टाइमस्टैम्प को स्ट्रिंग को स्पष्ट रूप से प्रस्तुत कर सकते हैं:
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
या आप अपनी पसंद के अनुसार टाइमस्टैम्प को प्रारूपित करने के लिए और भी स्पष्ट हो सकते हैं:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
यदि आप आईएसओ प्रारूप चाहते हैं, .isoformat()
तो वस्तु की विधि का उपयोग करें :
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
आप बिना रूपांतरण के गणना और मुद्रण के लिए इनका उपयोग चर में कर सकते हैं।
>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
import datetime; print "%s: My timestamp message" % datetime.datetime.utcnow()
Python3:import datetime; print ("%s: My timestamp message" % datetime.datetime.utcnow())
datetime.datetime.utcnow()
बुराई है। यह एक भोली तारीख बनाता है जो स्थानीय समय नहीं है। जब तक आपका स्थानीय समय UTC नहीं है, तब तक यह गलत होगा। datetime.datetime.now(datetime.timezone.utc)
इसके बजाय उपयोग करें । यह वर्तमान समय का प्रतिनिधित्व करते हुए एक टाइमजोन जागरूक डेटाइम बनाता है।
#Squiguy के उत्तर के आधार पर, एक सही टाइमस्टैम्प प्राप्त करने के लिए, मैं इसे फ्लोट से डालना चाहूंगा।
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
कम से कम यही अवधारणा है।
type(time.time())
देता है<type 'float'>
int()
बहुरूपी है। long
पुराने अजगर संस्करणों पर आवश्यक होने पर यह वापस आ जाएगा - सभी पूर्णांक नए पायथन संस्करणों पर लंबे हैं।
इसका उत्तर न तो हो सकता है और न ही दोनों।
न तो: time.time()
युग के बाद से बीते हुए सेकंड की संख्या लगभग। परिणाम समयक्षेत्र पर निर्भर नहीं करता है इसलिए यह न तो यूटीसी है और न ही स्थानीय समय। यहाँ "सेकेंड के बाद से युग" के लिए पोसिक्स की परिभाषा है ।
दोनों: time.time()
आपके सिस्टम की घड़ी को सिंक्रनाइज़ करने की आवश्यकता नहीं है, इसलिए यह इसके मूल्य को दर्शाता है (हालांकि इसका स्थानीय समयक्षेत्र से कोई लेना-देना नहीं है)। अलग-अलग कंप्यूटर एक ही समय में अलग-अलग परिणाम प्राप्त कर सकते हैं। दूसरी ओर अगर आपके कंप्यूटर समय पर किया जाता है तो सिंक्रनाइज़ यह टाइमस्टैम्प से UTC समय प्राप्त करने के लिए (यदि हम छलांग सेकंड की अनदेखी) आसान है:
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)
विभिन्न पायथन संस्करणों में यूटीसी समय से टाइमस्टैम्प कैसे प्राप्त करें , देखें कि मैं यूटीसी के अनुसार युग के बाद से सेकंड में परिवर्तित तिथि कैसे प्राप्त कर सकता हूं?
datetime.utcfromtimestamp
जबकि एक उत्तर पर 308 upvotes हैं datetime.fromtimestamp
:-(
time.time()
फ़ंक्शन क्या देता है (यह बहुत कम है)। आपकी टिप्पणी किसी अन्य प्रश्न को संबोधित करती है (आपने अपनी टिप्पणी बदल दी है क्योंकि मैंने इसका जवाब देना शुरू कर दिया है। बदतर के लिए)। एक तरफ ध्यान दें; शब्द "सही" का उपयोग संयम से किया जाना चाहिए (समय क्षेत्र जटिल हैं - कोई चांदी की गोली नहीं है - केवल एक विशेष उपयोग के मामले के लिए व्यापार बंद)।
datetime.datetime.utcfromtimestamp(ts)
। जब तक आपका स्थानीय समय UTC नहीं है, तब तक यह गलत होगा, क्योंकि यह एक भोली डेटाइम बनाता है जो स्थानीय समय नहीं है। datetime.datetime.fromtimestamp(ts,datetime.timezone.utc)
इसके बजाय उपयोग करें । यह टाइमस्टैम्प के रूप में एक ही समय का प्रतिनिधित्व करने वाले टाइमजोन जागरूक डेटाइम बनाता है।
naive_dt.astimezone()
इसका bytes.encode()
कोई अर्थ नहीं होगा जैसे कि पायथन 3 में मौजूद नहीं है। यह सच है कि कई मामलों में आंतरिक रूप से यूटीसी समय के साथ काम करना फायदेमंद है। डेटाइम मॉड्यूल के बारे में बहुत सी बातें कही जा सकती हैं (मैंने गोल्ड बैज प्राप्त करने के लिए पर्याप्त प्रश्नों का उत्तर दिया है) अधिकांश इस सवाल के दायरे से बाहर हैं: क्या time.time()
रिटर्न।
मैं आखिरकार इसके लिए तैयार हो गया:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
time.time()
रिटर्न दशमलव / फ्लोट की तरह 1574115250.818733
और मिली-सेकंड के बाद से आसानी से int(time.time() * 1000)
जैसे1574115254915
एक विशिष्ट समयक्षेत्र में "युग" जैसी कोई चीज नहीं है। युग को समय में एक विशिष्ट क्षण के रूप में अच्छी तरह से परिभाषित किया जाता है, इसलिए यदि आप समयक्षेत्र बदलते हैं, तो समय स्वयं भी बदल जाता है। विशेष रूप से, यह समय है Jan 1 1970 00:00:00 UTC
। इसलिए time.time()
युग के बाद से सेकंड की संख्या लौटाता है।
टाइमस्टैम्प हमेशा utc में समय होता है, लेकिन जब आप datetime.datetime.fromtimestamp
इसे कॉल करते हैं तो यह टाइमस्टैम्प के अनुरूप आपके स्थानीय समयक्षेत्र में आपको समय देता है, इसलिए परिणाम आपके लोकेल पर निर्भर करता है।
>>> import time, datetime
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
arrow
अलग व्यवहार के साथ अच्छी लाइब्रेरी मौजूद है। उसी स्थिति में यह आपको यूटीसी टाइमज़ोन के साथ समय वस्तु लौटाता है।
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>