माइक्रोसेकंड प्राप्त करने के लिए पायथन में स्ट्रैटेम () के साथ% f का उपयोग करना


112

मैं माइक्रोसेकंड परिशुद्धता के लिए स्ट्रैपटाइम () का उपयोग करने की कोशिश कर रहा हूं, जो% f (जैसा कि यहां बताया गया है ) का उपयोग करके संभव है । हालाँकि जब मैं निम्नलिखित कोड आज़माता हूँ:

import time
import strftime from time

print strftime("%H:%M:%S.%f")

... मुझे घंटे, मिनट और सेकंड मिलते हैं, लेकिन% f प्रिंट्स के रूप में% f है, जिसमें माइक्रोसेकंड का कोई संकेत नहीं है। मैं उबंटू पर पायथन 2.6.5 चला रहा हूं, इसलिए यह ठीक होना चाहिए और% f का समर्थन किया जाना चाहिए (यह 2.6 और इसके बाद के संस्करण के लिए समर्थित है, जहां तक ​​मुझे पता है।)

जवाबों:


181

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

from datetime import datetime
datetime.now().strftime("%H:%M:%S.%f")

चाल चलनी चाहिए!


1
यदि आप उपयोग करना चाहते हैं तो नहीं%z
vallentin

@ विल्टिन यकीन है कि यह विपरीत है! निर्देश datetime का समर्थन करता है%z जबकि समय प्रकट नहीं होता है
एडम्फिश

दोनों %zपायथन 3 में समर्थन करते हैं :-) यहाँ का
डेटाइम

ओहो तुम सही हो। मैं इसे डेटाइम पर याद कर रहा था क्योंकि यह नीचे की तरफ नहीं था, जैसे समय के लिए मेज पर। : पी
वालेंटिन 19

6
ध्यान दें from datetime import datetime। यदि आप बस करते import datetimeहैं तो आपको उपयोग करना होगाdatetime.datetime.now().strftime("%H:%M:%S.%f")
JBaczuk

34

आप गलत दस्तावेज देख रहे हैं। timeमॉड्यूल अलग प्रलेखन है

आप इस तरह से datetimeमॉड्यूल का उपयोग कर सकते हैं strftime:

>>> from datetime import datetime
>>>
>>> now = datetime.now()
>>> now.strftime("%H:%M:%S.%f")
'12:19:40.948000'


पोस्ट के लिए धन्यवाद। डेटाइम और टाइम मॉड्यूल क्यों है?
tommy.carstensen


9

पायथन के timeमॉड्यूल के साथ आप माइक्रोसेकंड नहीं प्राप्त कर सकते हैं %f

जो अभी भी timeकेवल मॉड्यूल के साथ जाना चाहते हैं , उनके लिए यहां एक समाधान है:

now = time.time()
mlsec = repr(now).split('.')[1][:3]
print time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), time.localtime(now))

आपको 2017-01-16 16: 42: 34.625 ईईटी जैसा कुछ मिलना चाहिए (हां, मैं मिलीसेकंड का उपयोग करता हूं क्योंकि यह काफी पर्याप्त है)।

कोड को विवरण में तोड़ने के लिए, नीचे दिए गए कोड को पायथन कंसोल में चिपकाएँ:

import time

# Get current timestamp
now = time.time()

# Debug now
now
print now
type(now)

# Debug strf time
struct_now = time.localtime(now)
print struct_now
type(struct_now)

# Print nicely formatted date
print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)

# Get miliseconds
mlsec = repr(now).split('.')[1][:3]
print mlsec

# Get your required timestamp string
timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
print timestamp

स्पष्टीकरण उद्देश्यों के लिए, मैंने अपना पायथन 2.7.12 परिणाम यहां चिपकाएं:

>>> import time
>>> # get current timestamp
... now = time.time()
>>> # debug now
... now
1484578293.519106
>>> print now
1484578293.52
>>> type(now)
<type 'float'>
>>> # debug strf time
... struct_now = time.localtime(now)
>>> print struct_now
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=16, tm_hour=16, tm_min=51, tm_sec=33, tm_wday=0, tm_yday=16, tm_isdst=0)
>>> type(struct_now)
<type 'time.struct_time'>
>>> # print nicely formatted date
... print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
2017-01-16 16:51:33 EET
>>> # get miliseconds
... mlsec = repr(now).split('.')[1][:3]
>>> print mlsec
519
>>> # get your required timestamp string
... timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
>>> print timestamp
2017-01-16 16:51:33.519 EET
>>>


5

आप timeइसके time()फ़ंक्शन का उपयोग करके मॉड्यूल से माइक्रोसेकंड सटीक भी प्राप्त कर सकते हैं ।
( time.time()युग के बाद से सेकंड में समय लौटाता है। इसका आंशिक हिस्सा माइक्रोसेकंड में समय है, जो आप चाहते हैं।)

>>> from time import time
>>> time()
... 1310554308.287459   # the fractional part is what you want.


# comparision with strftime -
>>> from datetime import datetime
>>> from time import time
>>> datetime.now().strftime("%f"), time()
... ('287389', 1310554310.287459)

1
अति उत्कृष्ट। आपकी सभी मदद का धन्यवाद। मैं चीजों को काम में लाने में कामयाब रहा, हालांकि एक अजीब बग पाया गया, जिसका मतलब है कि माइक्रोसेकंड स्क्रिप्ट को किसी विशेष परेशान पर sudo के रूप में चलाने पर दिखाई नहीं देता है, लेकिन अगर मैं इसे किसी विशेष cset पर चलाने की कोशिश करने से पहले sudo के रूप में लॉग इन करता हूं। अजीब।
user820924

4

जब माइक्रो सेकंड के लिए "% f" काम नहीं कर रहा है, तो कृपया निम्नलिखित विधि का उपयोग करें:

import datetime

def getTimeStamp():
    dt = datetime.datetime.now()
    return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond)

3
यह काम नहीं करेगा यदि dt.microsecond में 6 अंक से कम हो।
एम 456

3
यह एकमात्र समाधान था जो वास्तव में मेरे लिए काम करता था। Jython पर Windows% f में हमेशा शाब्दिक% f प्रिंट होता है। मैं चाहता था कि मिलीसेकंड स्ट्रैट (dt.microsecond) [0: 3]
एड रान्डल

1
str (dt.microsecond) [0: 3] एक गलत परिणाम उत्पन्न कर सकता है (जैसे 300 माइक्रोसेकंड 0.300 मिलीसेकंड हैं, लेकिन यह 300 प्रिंट करेगा!)
cabbi

3
"% 03d"% int (dt.microsecond / 1000) -> यह मिल्सकंडों को प्रिंट करता है और माइक्रोसेकंड्स को नहीं करता है
Cabbi

0

यदि आप गति चाहते हैं, तो यह प्रयास करें:

def _timestamp(prec=0):
    t = time.time()
    s = time.strftime("%H:%M:%S", time.localtime(t))
    if prec > 0:
        s += ("%.9f" % (t % 1,))[1:2+prec]
    return s

precसटीकता कहाँ है - आपको कितने दशमलव स्थान चाहिए। कृपया ध्यान दें कि फ़ंक्शन में कुछ अन्य समाधानों की तरह आंशिक भाग में अग्रणी शून्य के साथ मुद्दे नहीं हैं।


-1

यदि आप एक पूर्णांक चाहते हैं, तो इस कोड को आज़माएं:

import datetime
print(datetime.datetime.now().strftime("%s%f")[:13])

आउटपुट:

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