पायथन में मिलीसेकंड में वर्तमान समय प्राप्त करें?


531

पायथन में मिलीसेकंड में मुझे वर्तमान समय कैसे मिल सकता है?


67
import time; ms = time.time()*1000.0
नमूनाबीज

4
@samplebias: कुछ प्लेटफार्मों और पायथन संस्करणों की time.time()तुलना में बदतर परिशुद्धता प्रदान कर सकता है datetime.utcnow()
JFS

5
मिलीसेकंड में कब से ? यदि आप युग (मध्यरात्रि 1 जनवरी 1970 यूटीसी) के बाद से हैं, तो इसे देखें: stackoverflow.com/questions/18169099/…
माइकल स्काइपर

2
सच्चे माइक्रोसेकंड-रिज़ॉल्यूशन मिलीसेकंड समय टिकटों के लिए यहां देखें: stackoverflow.com/questions/38319606/…
गेब्रियल स्टेपल्स

जवाबों:


709

इसके लिए मुझे क्या चाहिए, यहाँ मैंने जो किया, वह @samplebias की टिप्पणी पर आधारित है:

import time
millis = int(round(time.time() * 1000))
print millis

Quick'n'easy। सभी का धन्यवाद, मस्तिष्क गोज़ के लिए खेद है।

पुन: उपयोग के लिए:

import time

current_milli_time = lambda: int(round(time.time() * 1000))

फिर:

>>> current_milli_time()
1378761833768

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

11
मुझे आश्चर्य हो रहा है, आपको इसकी आवश्यकता क्यों है round? लगता int(time.time() * 1000)है काफी है?
मैक्सिम व्लादिमीरस्की

14
IMO मैं फर्श का उपयोग करता हूं और गोल नहीं, लेकिन यह सिर्फ मैं ही हूं। अगर कोई पूछता है कि घंटा क्या है, और यह 7:32 है, तो वे जो संख्या चाहते हैं वह 7 है, न कि 8.
davr

1
@ParallelUniverse: विंडोज पर हाल ही में सीपीथॉन .utcnow()का उपयोग करता हैGetSystemTimeAsFileTime()time.clock()कॉल ( QueryPerformanceCounter()) कम होने से अधिक शोर का परिचय नहीं देगा ? देखें परिशुद्धता सटीकता के समान नहीं है
jfs

10
@MaximVladimirsky कि इंट () का व्यवहार नहीं है। Int कोई मान नहीं देता है, यह शून्य की ओर गोल होता है। जो सकारात्मक संख्या के लिए समान है, लेकिन नकारात्मक के लिए विपरीत है। int (1.5) 1 देता है, int (-1.5) -1 देता है, math.floor (-1.5) देता है -2 देखें: docs.python.org/2/library/stdtypes.html
Skip Huffman

91

time.time()केवल दूसरे को संकल्प दे सकता है, मिलीसेकंड के लिए पसंदीदा दृष्टिकोण है datetime

from datetime import datetime
dt = datetime.now()
dt.microsecond

94
काफी उपयोगी नहीं है - यह केवल आपको डीटीएस के सेकंड के भीतर माइक्रोसेकंड देता है । देखें stackoverflow.com/a/1905423/74632
बोरिस चेरवेनकोव

8
+1 क्योंकि यह सिस्टम से एक विश्वसनीय टाइमस्टैम्प प्राप्त करने का आधिकारिक तरीका है।
पास्कल

16
-1। यह इस प्रश्न का गलत उत्तर है। जैसा कि @Boris ने टिप्पणी की, यह "माइक्रोसेकंड में समय" नहीं देता है, उदाहरण के लिए दिनों, घंटों, सेकंडों की संख्या शामिल नहीं है।
जा

3
+1 यह एक सही मूल्य देता है और गणित के कारण अंकगणित को काम के लिए ग्रहण किया जा सकता है। यदि उपयोगकर्ता को मिलीसेकंड / माइक्रोसेकंड में वर्तमान समय की आवश्यकता होती है, तो साधारण अंकगणित उन्हें वहां मिलेगा। यदि एक समय डेल्टा की आवश्यकता होती है - जो कि नहीं पूछा जाता है - अंकगणित, फिर से, दिन बचाता है।
जैक स्टाउट

3
वर्तमान समय के माइक्रोसेकंड देता है, संपूर्ण टाइमस्टैम्प नहीं।
kawadhiya21

48
def TimestampMillisec64():
    return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) 

3
आप .total_seconds()(संभवतः) बेहतर परिशुद्धता के उत्पादन के लिए सूत्र को इनलाइन कर सकते हैं : (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3(सत्य विभाजन सक्षम के साथ) या यदि आप मिलीसेकंड को छोटा करना चाहते हैं तो उपयोग करें // 10**3
jfs

1
यह सबसे अच्छा जवाब लगता है अगर
डेटाइम

35

से संस्करण 3.7 का उपयोग कर सकते time.time_ns()युग से पारित कर दिया नैनो सेकंड के रूप में समय मिलता है। तो आप कर सकते हैं

ms = time.time_ns() // 1000000 

पूर्णांक के रूप में मिली-सेकंड में समय पाने के लिए।


इसने मेरे लिए सबसे अच्छा काम किया (पायथन 3.7.6)
पॉल वाटसन


13

एक अन्य समाधान वह फ़ंक्शन है जिसे आप अपने स्वयं के utils.py में एम्बेड कर सकते हैं

import time as time_ #make sure we don't override time
def millis():
    return int(round(time_.time() * 1000))

12

यदि आप अपने कोड में एक सरल विधि चाहते हैं जो मिलीसेकंड को डेटाइम के साथ लौटाता है:

from datetime import datetime
from datetime import timedelta

start_time = datetime.now()

# returns the elapsed milliseconds since the start of the program
def millis():
   dt = datetime.now() - start_time
   ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
   return ms

यह मिलीसेकंड में दो बार का अंतर है, @Jason के उत्तर के साथ अपनी विधि के संयोजन से मिलीसेकेंड में वर्तमान टाइमस्टैम्प होता है ... इसके बारे में सोचकर, UNIX टाइमस्टैम्प आपका तरीका start_time= डेटाइम (1970-1-1,1) के साथ होगा
PR

स्थानीय समय अस्पष्ट और गैर-नीरस हो सकता है (डीएसटी संक्रमण के कारण या स्थानीय यूआरटी ऑफसेट को बदलने के लिए अन्य कारण)। .utcnow()इसके बजाय का उपयोग करें या यदि आप पूर्ण समय की जरूरत नहीं है तो आप उपयोग कर सकते हैं time.monotonous()। नोट: फ़्लोट-पॉइंट अंकगणित some_int + dt.microseconds/ 1000.0और ( ) / 10**3सत्य विभाजन सक्षम के साथ सूत्र के कारण एक सूक्ष्म अंतर है । देखें स्पष्ट फार्मूला और के लिए लिंक total_seconds()संबंधित जवाब में
JFS

7

मिलीसेकंड में वर्तमान UTC समय प्राप्त करने का सबसे सरल तरीका है:

# timeutil.py
import datetime


def get_epochtime_ms():
    return round(datetime.datetime.utcnow().timestamp() * 1000)

# sample.py
import timeutil


timeutil.get_epochtime_ms()

7

यदि आप बीते हुए समय को मापने के बारे में चिंतित हैं, तो आपको इसका उपयोग करना चाहिए मोनोटोनिक घड़ी (पायथन 3) का । यह घड़ी सिस्टम घड़ी के अपडेट से प्रभावित नहीं होती है, जैसे कि आप देखेंगे कि उदाहरण के लिए, एक NTP क्वेरी ने आपके सिस्टम का समय समायोजित किया है या नहीं।

>>> import time
>>> millis = round(time.monotonic() * 1000)

यह सेकंड में एक संदर्भ समय प्रदान करता है जिसका उपयोग बाद के समय को मापने के लिए तुलना करने के लिए किया जा सकता है।


4

यदि आप मेरे कोड (नीचे) का उपयोग करते हैं, तो समय सेकंड में दिखाई देगा, फिर, दशमलव के बाद, मिलीसेकंड। मुझे लगता है कि विंडोज और यूनिक्स के बीच अंतर है - अगर वहाँ है तो कृपया टिप्पणी करें।

from time import time

x = time()
print(x)

मेरा परिणाम (विंडोज पर) था:

1576095264.2682993

संपादित करें : कोई अंतर नहीं है :) धन्यवाद tc0nn


1
मैक OSX पर कोई अंतर नहीं है:/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
tc0nn

1
Ubuntu 18 पर कोई अंतर नहीं है:python3 scratch.py 1577212763.9136133
tc0nn

1

मिलीसेकंड के लिए 1000 से ये गुणन कुछ पूर्वापेक्षित हल करने या बनाने के लिए सभ्य हो सकते हैं। इसका उपयोग आपके डेटाबेस में एक अंतर को भरने के लिए किया जा सकता है जो वास्तव में कभी इसका उपयोग नहीं करता है। हालांकि, वास्तविक परिस्थितियों के लिए जिन्हें सटीक समय की आवश्यकता होती है, यह अंततः विफल हो जाएगा। मैं सुझाव दूंगा कि कोई भी इस पद्धति का उपयोग मिशन-क्रिटिकल ऑपरेशंस के लिए नहीं करेगा, जिसके लिए विशिष्ट समय पर कार्रवाई, या प्रसंस्करण की आवश्यकता होती है।

उदाहरण के लिए: संयुक्त राज्य अमेरिका में 30-80ms के राउंड-ट्रिप पिंग्स ... आप बस इसे गोल नहीं कर सकते और इसे कुशलता से उपयोग कर सकते हैं।

मेरे स्वयं के उदाहरण के लिए हर सेकंड में कार्यों की आवश्यकता होती है, जिसका अर्थ है कि यदि मैंने पहले कार्यों के बाद गोल किया तो मैं अभी भी प्रसंस्करण समय को बढ़ा दूंगा, जो प्रत्येक मुख्य लूप चक्र को गुणा करता है। यह हर 60 सेकंड में कुल फ़ंक्शन कॉल होने के कारण समाप्त हो गया। यह ~ 1440 एक दिन है .. बहुत सटीक नहीं है।

डेटाबेस अंतर को हल करने से परे अधिक सटीक तर्क की तलाश कर रहे लोगों के लिए बस एक विचार जो वास्तव में इसका उपयोग नहीं करता है।


2
क्या आपके पास एक बेहतर समाधान है? ईमानदारी से, मुझे वह नहीं मिलता जो आप कह रहे हैं। "राउंड अप" से आपका क्या मतलब है?
शाही रात

2
बेहतर समझ के लिए एक व्यावहारिक उदाहरण के साथ अपने समाधान को स्पष्ट करें
रतन उदय कुमार

0

datetimeपायथन 3 के लिए मॉड्यूल का उपयोग करते हुए बस एक और समाधान ।

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