क्या पायथन का समय. () स्थानीय या यूटीसी टाइमस्टैम्प लौटाता है?


558

क्या time.time()पायथन समय मॉड्यूल सिस्टम के समय या यूटीसी में समय लौटाता है?


87
टाइमस्टैम्प में टाइमज़ोन नहीं है। वे युग के बाद से कई सेकंड का प्रतिनिधित्व करते हैं। युग समय का एक विशिष्ट क्षण है जो समयक्षेत्र पर निर्भर नहीं करता है।
jwg

2
@jwg: आमतौर पर इस्तेमाल किए जाने वाले POSIX टाइमस्टैम्प में लीप सेकंड की गिनती नहीं होती है और इसलिए वे युग के बाद "[बीमित SI] सेकंड की संख्या नहीं हैं" (वे करीब हैं)।
jfs

7
मुझे नहीं लगता कि यह एक सटीक आपत्ति है @JFSebastian। लीप सेकंड 'युग के बाद से बीते हुए सेकंड' नहीं हैं। वे घड़ियों द्वारा दर्ज किए गए समय अभ्यावेदन में परिवर्तन हैं जो बीते हुए सेकंड के अनुरूप नहीं हैं।
jwg

4
@JFSebastian भ्रम के लिए क्षमा करें। लीप सेकंड 'बीता हुआ सेकंड' नहीं हैं। इसलिए टाइमस्टैम्प, जो 'बीता हुआ सेकंड्स की संख्या' है, और लीप सेकंड को शामिल नहीं करना चाहिए।
jwg

2
@jwg गलत आप भौतिक समय नहीं मिटा सकते। POSIX टाइमस्टैम्प बीमित SI सेकंड की संख्या नहीं है। यहां एक उदाहरण दिया गया है: न्यूयॉर्क में "31 दिसंबर, 2016 को शाम 6:59:59 बजे" और "31 दिसंबर, 2016 को शाम 7:00:01 बजे" के बीच 3 सेकंड बीत गए, लेकिन इसी POSIX टाइमस्टैम्प में अंतर केवल 2 सेकंड है ( लीप सेकेंड की गिनती नहीं होती है)।
JFS

जवाबों:


779

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लाइब्रेरी में इस्तेमाल करके स्ट्रिंग में बदल दिया, यह एक स्ट्रिंग है जो मानव पठनीय है।


72
import timeजब हम मूल रूप से आपको टाइमस्टैम्प देते हैं तो हमें क्यों करना चाहिए । बस मिलीसेकंड निकालें -str(datetime.datetime.now()).split('.')[0]
हुसैन

17
@ एलेक्सिस यूनिक्स युग यहां स्पष्ट रूप से परिभाषित किया गया है । यह पेज के नीचे एक पायथन उदाहरण भी बताता है। मैं आपकी टिप्पणी नहीं समझता।
स्क्विगयू

9
@squiguy सच कहूँ तो मुझे याद नहीं है कि मुझे क्या कहा गया था। मुझे कुछ गलतफहमी हुई होगी, और मैं यह जानने के लिए संघर्ष कर रहा था कि कुछ परीक्षण क्यों टूट रहे थे, जबकि मैं फ्रांस और अमेरिका के बीच स्थानांतरित हो गया था और अंत में पाया कि यह मुद्दा डीएसटी के कारण था जो वर्ष की इस अवधि में सप्ताह को लंबा बनाता है। इसके बारे में क्षमा करें और इसे इंगित करने के लिए धन्यवाद।
एलेक्सिस

5
यह "UTC में सेकंड" नहीं है द्वारा लौटाई गई टाइमस्टैम्प time.time()किसी भी समयक्षेत्र में नहीं है । "सेकंड के बाद से युग" एक शब्द है; यह कुछ समय (कुछ समय) के बाद से बीता हुआ सेकंड नहीं है । आप इसे अपने स्थानीय समय (tz डेटाबेस के साथ) और / या UTC टाइमज़ोन में आसानी से परिवर्तित कर सकते हैं। btw, यदि आप .strftime()परिणाम को छोड़ देते हैं (लगभग) वही (+/- माइक्रोसेकंड)।
jfs

3
बस इसका परीक्षण किया, time.time () UTC को समय नहीं देता है, यह मेरे स्थानीय ज़ोन का समय देता है
sliders_alpha

301

यह टाइमस्टैम्प के टेक्स्ट फॉर्म के लिए है लिए है जिसका उपयोग आपकी टेक्स्ट फ़ाइलों में किया जा सकता है। (प्रश्न का शीर्षक अतीत में अलग था, इसलिए इस उत्तर के लिए परिचय को यह स्पष्ट करने के लिए बदल दिया गया था कि इसे समय के रूप में कैसे व्याख्या किया जा सकता है। [अद्यतन 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

1
मैं युग का समय चाहता था .... तिथि प्रारूप में नहीं ... जैसा कि मेरे समय के उल्लेख से स्पष्ट था। समय ()
शरण मोहपात्रा

34
ठीक, कोई समस्या नहीं। पाठ फ़ाइलों में रखने के लिए किसी और को टाइमस्टैम्प कहने की आवश्यकता हो सकती है ।
पेपरा

1
मैं एक और एक हूं, यहां अप्रत्यक्ष संख्या के कारण अप्रासंगिक होने की संभावना है । प्रश्न विकृत है और विशिष्ट आवश्यकता के लिए स्वीकृत उत्तर भ्रामक है: मानव पठनीय प्रत्यय प्राप्त करना - फाइलनाम के लिए कहना - सबसे अधिक उपयोग किए जाने वाले सर्वर टाइमज़ोन में।

स्ट्रिंग के भाग के रूप में टाइमस्टैम्प को प्रिंट करने के लिए, इसका उपयोग करें: Python2: import datetime; print "%s: My timestamp message" % datetime.datetime.utcnow()Python3:import datetime; print ("%s: My timestamp message" % datetime.datetime.utcnow())
Mr-IDE

datetime.datetime.utcnow()बुराई है। यह एक भोली तारीख बनाता है जो स्थानीय समय नहीं है। जब तक आपका स्थानीय समय UTC नहीं है, तब तक यह गलत होगा। datetime.datetime.now(datetime.timezone.utc)इसके बजाय उपयोग करें । यह वर्तमान समय का प्रतिनिधित्व करते हुए एक टाइमजोन जागरूक डेटाइम बनाता है।
टेरेल शुमवे

139

#Squiguy के उत्तर के आधार पर, एक सही टाइमस्टैम्प प्राप्त करने के लिए, मैं इसे फ्लोट से डालना चाहूंगा।

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

कम से कम यही अवधारणा है।


1
टाइमस्टैम्प टाइप करने का क्या कारण है? डिफ़ॉल्ट रूप से क्या प्रकार है?
टिज़ी

3
@ टिज़ी type(time.time())देता है<type 'float'>
प्रसिद्धगर्किन izz

4
लेकिन अगर आपको सेकंड की तुलना में अधिक सटीक समय की आवश्यकता होती है, तो फ्लोट का अर्थ होता है।
20

3
@ रुडीस्ट्रीडम: पायथन दृढ़ता से टाइप किया गया है। इसे स्थैतिक रूप से टाइप करने के साथ भ्रमित न करें।
22:36

1
@CheokYanCheng: int()बहुरूपी है। longपुराने अजगर संस्करणों पर आवश्यक होने पर यह वापस आ जाएगा - सभी पूर्णांक नए पायथन संस्करणों पर लंबे हैं।
jfs

30

इसका उत्तर न तो हो सकता है और न ही दोनों।

  • न तो: time.time()युग के बाद से बीते हुए सेकंड की संख्या लगभग। परिणाम समयक्षेत्र पर निर्भर नहीं करता है इसलिए यह न तो यूटीसी है और न ही स्थानीय समय। यहाँ "सेकेंड के बाद से युग" के लिए पोसिक्स की परिभाषा है

  • दोनों: time.time()आपके सिस्टम की घड़ी को सिंक्रनाइज़ करने की आवश्यकता नहीं है, इसलिए यह इसके मूल्य को दर्शाता है (हालांकि इसका स्थानीय समयक्षेत्र से कोई लेना-देना नहीं है)। अलग-अलग कंप्यूटर एक ही समय में अलग-अलग परिणाम प्राप्त कर सकते हैं। दूसरी ओर अगर आपके कंप्यूटर समय पर किया जाता है तो सिंक्रनाइज़ यह टाइमस्टैम्प से UTC समय प्राप्त करने के लिए (यदि हम छलांग सेकंड की अनदेखी) आसान है:

    from datetime import datetime
    
    utc_dt = datetime.utcfromtimestamp(timestamp)

विभिन्न पायथन संस्करणों में यूटीसी समय से टाइमस्टैम्प कैसे प्राप्त करें , देखें कि मैं यूटीसी के अनुसार युग के बाद से सेकंड में परिवर्तित तिथि कैसे प्राप्त कर सकता हूं?


4
यह एकमात्र उत्तर है जो सही ढंग से उल्लेख कर रहा है, datetime.utcfromtimestampजबकि एक उत्तर पर 308 upvotes हैं datetime.fromtimestamp:-(

@TerrelShumway सवाल यह है कि time.time()फ़ंक्शन क्या देता है (यह बहुत कम है)। आपकी टिप्पणी किसी अन्य प्रश्न को संबोधित करती है (आपने अपनी टिप्पणी बदल दी है क्योंकि मैंने इसका जवाब देना शुरू कर दिया है। बदतर के लिए)। एक तरफ ध्यान दें; शब्द "सही" का उपयोग संयम से किया जाना चाहिए (समय क्षेत्र जटिल हैं - कोई चांदी की गोली नहीं है - केवल एक विशेष उपयोग के मामले के लिए व्यापार बंद)।
JFS

उपयोग न करें datetime.datetime.utcfromtimestamp(ts)। जब तक आपका स्थानीय समय UTC नहीं है, तब तक यह गलत होगा, क्योंकि यह एक भोली डेटाइम बनाता है जो स्थानीय समय नहीं है। datetime.datetime.fromtimestamp(ts,datetime.timezone.utc)इसके बजाय उपयोग करें । यह टाइमस्टैम्प के रूप में एक ही समय का प्रतिनिधित्व करने वाले टाइमजोन जागरूक डेटाइम बनाता है।
Terrel Shumway

हाँ। मेरी पिछली टिप्पणी गलत थी। डेटाइम मॉड्यूल में अधिकांश कोड भोले डेटासेटाइम को स्थानीय समय के रूप में मानते हैं। भोली डेटासेटिम्स का उपयोग एन्कोडिंग को जाने बिना एक टेक्स्ट फ़ाइल खोलने जैसा है।
टेरेल शुमवे

@TerrelShumway यह मान लेना गलत है कि UTC समय का उपयोग केवल उन प्रणालियों पर किया जा सकता है जहां यह स्थानीय समय है। यह सच है कि stdlib के कुछ हिस्से स्थानीय समय-सीमा (पछतावे) के रूप में भोली-भाली वस्तुओं का इलाज करते हैं। मैं पसंद करूंगा कि naive_dt.astimezone()इसका bytes.encode()कोई अर्थ नहीं होगा जैसे कि पायथन 3 में मौजूद नहीं है। यह सच है कि कई मामलों में आंतरिक रूप से यूटीसी समय के साथ काम करना फायदेमंद है। डेटाइम मॉड्यूल के बारे में बहुत सी बातें कही जा सकती हैं (मैंने गोल्ड बैज प्राप्त करने के लिए पर्याप्त प्रश्नों का उत्तर दिया है) अधिकांश इस सवाल के दायरे से बाहर हैं: क्या time.time()रिटर्न।
JFS

4

मैं आखिरकार इसके लिए तैयार हो गया:

>>> import time
>>> time.mktime(time.gmtime())
1509467455.0

1
यह आपकी स्थानीय आवश्यकताओं को पूरा कर सकता है, लेकिन [GMT] युग के बाद से उस श्रेणी में संख्या की अपेक्षा करने वाले लोगों के लिए यह भ्रामक हो सकता है। time.time()रिटर्न दशमलव / फ्लोट की तरह 1574115250.818733और मिली-सेकंड के बाद से आसानी से int(time.time() * 1000)जैसे1574115254915
MarkHu

3

एक विशिष्ट समयक्षेत्र में "युग" जैसी कोई चीज नहीं है। युग को समय में एक विशिष्ट क्षण के रूप में अच्छी तरह से परिभाषित किया जाता है, इसलिए यदि आप समयक्षेत्र बदलते हैं, तो समय स्वयं भी बदल जाता है। विशेष रूप से, यह समय है Jan 1 1970 00:00:00 UTC। इसलिए time.time()युग के बाद से सेकंड की संख्या लौटाता है।


हालांकि यह सच है कि UTC एक समय मानक है और समय क्षेत्र नहीं है, मानक यह है कि यह GMT के समान समय साझा करता है। तो ....
क्रेग हिक्स

3

टाइमस्टैम्प हमेशा 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]>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.