यूनिक्स टाइमस्टैम्प प्रारूप में वर्तमान जीएमटी समय प्राप्त करने का सबसे आसान तरीका क्या है?


175

समय के साथ निपटने के लिए अजगर यहां विभिन्न पैकेज ( datetime, ) प्रदान करता है time, calendarजैसा कि यहां देखा जा सकता है । मैंने वर्तमान GMT समय प्राप्त करने के लिए निम्नलिखित का उपयोग करके एक बड़ी गलती कीtime.mktime(datetime.datetime.utcnow().timetuple())

यूनिक्स टाइमस्टैम्प में वर्तमान जीएमटी समय प्राप्त करने का एक सरल तरीका क्या है?


1
इनपुट / आउटपुट क्या हैं? datetime.utcnow()वर्तमान UTC समय को डेटाटाइम ऑब्जेक्ट के रूप में लौटाता है (मुझे लगता है कि आप UTC चाहते हैं जब आप "GMT समय" के बारे में बात कर रहे हैं)। time.time()यूनिक्स टाइमस्टैम्प को सीधे फ्लोट नंबर के रूप में देता है। UTC में POSIX टाइमस्टैम्प में समय का प्रतिनिधित्व करने के लिए datetime.date/datetime.datetime परिवर्तित करने का तरीका यहां दिया गया है ।
JFS

क्या आपका प्रस्तावित तरीका गलत है, या सिर्फ बहुत अधिक क्रिया है? संबंधित: stackoverflow.com/questions/15940280/…
Ciro Santilli 郝海东 .com/ .com/ .com/ ''

आपकी पद्धति में गलती क्यों थी?
skeller88

जवाबों:


230

मैं समय (समय) का उपयोग सेकंड के बाद से सेकंड में टाइमस्टैम्प प्राप्त करने के लिए करूंगा।

import time

time.time()

आउटपुट:

1369550494.884832

अधिकांश प्लेटफार्मों पर मानक CPython कार्यान्वयन के लिए यह UTC मान लौटाएगा।


21
पकड़ यह है कि आपकी मशीन की स्थानीय घड़ी UTC में नहीं हो सकती है।
9000

@ 9000: सही है, हालाँकि मैं हमेशा किसी भी वातावरण में UTC पर जोर दूंगा जहाँ समय को ध्यान में रखते हुए। और उसने सबसे सरल उपाय पूछा। ध्यान दें कि लिनक्स, बीएसडी, मैक ओएस एक्स और विंडोज सहित आधुनिक प्लेटफार्मों पर सीपीथॉन के साथ, सभी समय के लिए यूटीसी वापस करेंगे। ()। यह इन ओएस पर सी मानक पुस्तकालय के समय समारोह के व्यवहार को दर्शाता है।
एडमंड बर्नेट

66
@ 9000: स्थानीय समय क्षेत्र कोई मायने नहीं रखता। यूनिक्स समय यूटीसी समय से मेल खाता है (यदि हम लीप सेकंड के आसपास के समय की उपेक्षा करते हैं)। इसके बारे में सोचें: टाइमस्टैम्प युग के बाद से समाप्त होने वाले सेकंड की संख्या है (समय में एक निश्चित समय): यह समय-क्षेत्र मशीन की स्थानीय घड़ी का उपयोग करने पर क्यों निर्भर करेगा? किसी भी समय में यूनिक्स समय दुनिया भर में एक ही है। कुछ (अज्ञात) प्लेटफ़ॉर्म एक अलग युग का उपयोग कर सकते हैं, लेकिन इसका मूल्य अभी भी स्थानीय समयक्षेत्र पर निर्भर नहीं होगा।
JFS



42

क्या यह मदद करता है?

from datetime import datetime
import calendar

d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime

पाइथन UTC डेटाटाइम ऑब्जेक्ट को UNIX टाइमस्टैम्प में कैसे परिवर्तित करें


@Cairnarvon यह सिर्फ एक उदाहरण था। यदि आप वर्तमान टाइमस्टैम्प चाहते हैं तो आप बस कॉल कर सकते हैं time.time()और बिल्कुल भी कोई डेटाटाइम रूपांतरण की आवश्यकता नहीं है।
मेसा

1
एफडब्ल्यूआईडब्ल्यू: यह यूटीसी समय नहीं है, यह यूटीसी स्थानीय समय में परिवर्तित हो गया है। UTC में टाइमस्टैम्प प्राप्त करने के लिए आपको किसी और दिन काम करना होगा।
शर्लक

18

या सिर्फ डेटाटाइम मानक मॉड्यूल का उपयोग करके

In [2]: from datetime import timezone, datetime
   ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
   ...: 
Out[2]: 1514901741720

आप जिस संकल्प को चाहते हैं, उसके आधार पर आप छोटा या गुणा कर सकते हैं। यह उदाहरण मिलिस आउटपुट कर रहा है।

यदि आप एक उचित यूनिक्स टाइमस्टैम्प (सेकंड में) चाहते हैं तो हटा दें* 1000


आप कोड को विशेष रूप से एक पूर्णांक में समय के लिए मजबूर कर रहे हैं इसलिए मैं उलझन में हूं कि आउटपुट टेक्स्ट एक दशमलव संख्या क्यों है?
वेस्टन

मेरी बुरी बात है, मैंने इंट कास्टिंग बाद में जोड़ा
Maresh

यह जावास्क्रिप्ट momentलाइब्रेरी का सटीक समकक्ष है moment().utc().valueOf()। ठीक वही जो मेरे द्वारा खोजा जा रहा था। धन्यवाद
azhar22k

UNIX टाइमस्टैम्प को 1970 के बाद से सेकंड माना जाता है । आपका समाधान इसका उत्पादन नहीं करता है।
skyking

1
"आप चाहते हैं कि आप" 1000 * भाग को छोड़ें और आप सेकंड प्राप्त करें।
मार्श

18

को Python2 और python3

समय मॉड्यूल का उपयोग करना अच्छा है

import time
int(time.time())

1573708436

आप डेटाइम मॉड्यूल का उपयोग भी कर सकते हैं, लेकिन जब आप स्ट्रैफ़टाइम ('% s') का उपयोग करते हैं, लेकिन स्ट्रैफ़टाइम आपके स्थानीय समय में परिवर्तित हो जाता है!

को Python2

from datetime import datetime
datetime.utcnow().strftime('%s')

python3

from datetime import datetime
datetime.utcnow().timestamp()

2
यूटीसी +1 में होने के नाते, time.time()और datetime.utcnow().timestamp()है नहीं एक ही मूल्य देना!
यूजर 136036

हालाँकि, मुझे उम्मीद है कि दूसरा विकल्प सही होगा, मुझे UTC + 1100 में सही मूल्य प्राप्त करने के लिए datetime.now () (टाइमस्टैम्प) का उपयोग करना होगा। मुझे टाइमस्टैम्प () के लिए या तो सही ढंग से काम करने की उम्मीद थी, लेकिन यह प्रतीत नहीं होता है
डेविड वाटरवर्थ

करीब देखते हुए, दोनों datetime.utcnow () और datetime.now () एक भोली डेटटाइम (कोई tzinfo) नहीं लौटाते, और टाइमस्टैम्प () tzinfo = null होने पर स्थानीय मान लेता है।
डेविड वाटरवर्थ

2

मुझे यह तरीका पसंद है:

import datetime, time

dts = datetime.datetime.utcnow()
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6)

यहां पोस्ट की गई अन्य विधियां या तो आपको सभी प्लेटफार्मों पर यूटीसी देने की गारंटी नहीं हैं या केवल पूरे सेकंड की रिपोर्ट करती हैं। यदि आप पूर्ण रिज़ॉल्यूशन चाहते हैं, तो यह माइक्रो-सेकंड के लिए काम करता है।


1
जब तक आप UTC + 0000 टाइमज़ोन में नहीं होंगे तब तक दुर्भाग्य से यह UTC नहीं देता है। utctimetupleइसके बजाय का उपयोग कर चाल हालांकि करता है।
आसमान छूना

1
from datetime import datetime as dt
dt.utcnow().strftime("%s")

आउटपुट:

1544524990

यह time.time()मेरे लिए उतना ही वापस नहीं आता है।
अल्विनियस

1
ऐसा शायद इसलिए क्योंकि बिना समय की जानकारी के dt.utcnowलौटा datetime। फिर strftimeमानता है कि datetimeस्थानीय समय है।
skyking

1
इस पेज पर लगभग सभी उत्तरों के लिए यह समस्या बहुत अधिक है!
डेविड वाटरवर्थ

1
#First Example:
from datetime import datetime, timezone    
timstamp1 =int(datetime.now(tz=timezone.utc).timestamp() * 1000)
print(timstamp1)

आउटपुट: 1572878043380

#second example:
import time
timstamp2 =int(time.time())
print(timstamp2)

आउटपुट: 1572878043

  • यहां, हम देख सकते हैं पहला उदाहरण दूसरे की तुलना में अधिक सटीक समय देता है।
  • यहां मैं पहला प्रयोग कर रहा हूं।

1

कम से कम python3 में, यह काम करता है:

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.