Gmtime () के समय + दिनांक आउटपुट से युग के बाद से सेकंड कैसे प्राप्त करें?


162

आप रिवर्स कैसे करते हैं gmtime(), जहां आप समय + तिथि डालते हैं और सेकंड की संख्या प्राप्त करते हैं?

मेरे पास तार हैं 'Jul 9, 2009 @ 20:02:58 UTC', और मैं युग और 9 जुलाई, 2009 के बीच सेकंड की संख्या वापस प्राप्त करना चाहता हूं।

मैंने कोशिश की है, time.strftimeलेकिन मुझे नहीं पता कि इसे कैसे ठीक से उपयोग करना है, या यदि यह उपयोग करने के लिए सही कमांड है।

जवाबों:


123

यदि आप यहां मिले क्योंकि एक खोज इंजन ने आपको बताया कि यह कैसे यूनिक्स टाइमस्टैम्प प्राप्त करने के लिए है, तो इस उत्तर को पढ़ना बंद करें। एक नीचे स्क्रॉल करें।

अगर आप उलटना time.gmtime()चाहते हैं, तो आप चाहते हैं calendar.timegm()

>>> calendar.timegm(time.gmtime())
1293581619.0

आप अपनी स्ट्रिंग को समय के साथ बदल सकते हैं time.strptime(), जिसके साथ आप एक टाइम टपल लौटा सकते हैं calendar.timegm():

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

कैलेंडर मॉड्यूल के बारे में अधिक जानकारी यहाँ


16
यदि आप वर्तमान यूनिक्स युग के समय की तलाश कर रहे हैं, तो कृपया @ दान की टिप्पणी या नरेश के उत्तर को देखें, यह उत्तर गलत है!
kosii

641

समय मॉड्यूल का उपयोग करें :

epoch_time = int(time.time())

14
@ डानजे: यह एपोच (समय में एक निश्चित क्षण) के बाद से बीते हुए सेकंड की संख्या है और यह किसी भी टाइमज़ोन में समान है। यद्यपि यदि हम लीप सेकंड के आसपास के समय के उदाहरणों को अनदेखा करते हैं; timeयूनिक्स युग (1970) का उपयोग करने पर इसे यूटीसी में परिवर्तित करना आसान है ।
jfs

43
ध्यान दें कि यह वही नहीं है जो ओपी पूछ रहा था , लेकिन यह वही है जो मैं चाहता था। तो +1।
निर्भय_फूल

6
यह शीर्षक में पूछा गया उत्तर है: "युग के बाद का समय प्राप्त करना"। +1
एलेजांद्रोवडी

@JFSebastian यह सेकंड के लिए युगांतर देता है। ऊपर दिए गए उत्तर का उपयोग करके मैं मिलिशिसकंड तक रिज़ॉल्यूशन कैसे प्राप्त कर सकता हूं?
मार्लोन एबेकून

2
ऊपर मेरी टिप्पणी का विस्तार करने के लिए : time.time()मूल्य स्थानीय टाइमज़ोन पर निर्भर नहीं करता है (यदि हम "सही" टाइमज़ोन और इस तरह बाहर करते हैं) जैसे, अगर यह पॉसिक्स समय देता है (जैसा कि अधिकांश सिस्टम पर होता है) तो यह एसआई सेकंड की संख्या है युग (1970-01-01UTC) लीप सेकंड की गिनती नहीं। इस मान को यूटीसी (लीप सेकंड को छोड़कर) में परिवर्तित किया जा सकता है लेकिन यह यूटीसी नहीं है । @MarlonAbeykoon: मुझे यह जवाब
jfs

10

ध्यान दें कि time.gmtimeटाइमस्टैम्प 0को मैप करें 1970-1-1 00:00:00

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.mktime(time.gmtime(0)) आपको एक राशि द्वारा स्थानांतरित टाइमस्टैम्प देता है जो आपके स्थान पर निर्भर करता है, जो सामान्य रूप से 0 नहीं हो सकता है।

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

का विलोम time.gmtimeहै calendar.timegm:

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0

यह समय-समय पर बेहतर स्पष्टीकरण और उदाहरण देता है (जो वर्तमान समय को ध्यान में रखते हैं), धन्यवाद
Jkm

@Jkm: के mktime()साथ प्रयोग नहीं करते gmtime()mktime()आपके स्थानीय समय को स्वीकार करता है, लेकिन UTC का समयgmtime() देता है - आपका स्थानीय समय क्षेत्र भिन्न हो सकता है। "आपके लोकेल के सापेक्ष टाइमस्टैम्प" गैर-समझदारी है: पोसिक्स टाइमस्टैम्प आपके लोकेल (स्थानीय समयक्षेत्र) पर निर्भर नहीं करता है - यह दुनिया भर में एक ही मूल्य है। "सेकंड के बाद से" ज्यादातर मामलों में (यहां तक ​​कि विंडोज पर) पॉसिक्स टाइमस्टैम्प है - टीएआई टाइम स्केल का उपयोग करने वाले "सही" टाइमज़ोन जैसी चीजें आम नहीं हैं। देखें क्या पायथन के time.time () स्थानीय या यूटीसी टाइमस्टैम्प वापसी?
JFS

@ जेएफ सेबस्टियन आप सही हैं। वास्तव में मुझे mktime()हाल ही में कुछ मुद्दा मिला है । कुछ अजगर वेब सर्वर के लिए (उदाहरण के लिए बवंडर), चूंकि प्रक्रिया चलती रहती है, भले ही मैं सिस्टम लोकेल को बदल देता हूं, mktime()वेब सर्वर एपीआई द्वारा कॉल किए गए समय ऑब्जेक्ट को उत्पन्न करने के लिए पुराने टाइमज़ोन का उपयोग अभी भी करते हैं । मुझे स्विच करना है gmtime()और मैन्युअल रूप से gmt ऑफसेट को लागू करना है।
Jkm

5
ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()

यह से अलग होना चाहिए int(time.time()), लेकिन यह कुछ का उपयोग करने के लिए सुरक्षित हैx % (60*60*24)

डेटाइम - मूल तिथि और समय प्रकार:

समय मॉड्यूल के विपरीत, डेटाटाइम मॉड्यूल लीप सेकंड का समर्थन नहीं करता है।


3
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")

मैं किसी कारण से स्ट्रैप्टम तक नहीं पहुँच सकता। मैंने
डेटाइम

1
@calccrypto आपको from datetime import datetimeया तो करना होगाdatetime.datetime.strptime
pathikrit

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