Python'da% f ile strftime () kullanarak mikrosaniye elde etmek


112

Strftime () kullanarak mikrosaniye hassasiyetini kullanmaya çalışıyorum, bu% f kullanarak mümkün görünüyor ( burada belirtildiği gibi ). Ancak aşağıdaki kodu denediğimde:

import time
import strftime from time

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

... Saati, dakikaları ve saniyeleri alıyorum, ancak% f, mikrosaniye belirtisi olmadan% f olarak yazdırıyor. Ubuntu'da Python 2.6.5 çalıştırıyorum, bu yüzden iyi olmalı ve% f desteklenmeli (bildiğim kadarıyla 2.6 ve üstü için destekleniyor.)

Yanıtlar:


181

Bunu elde etmek için datetime'ın strftime işlevini kullanabilirsiniz. Sorun, zamanın strftime'ın mikrosaniye bilgisi taşımayan bir zaman çizelgesini kabul etmesidir.

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

Hile yapmalı!


1
%z
Kullanmak

@Vallentin bunun tam tersi olduğuna eminim! datetime destekleyen %zyönergesini ederken zaman görünmüyor .
adamnfish

Her ikisi %zde Python 3'te destekleniyor :-) işte tarih saat
adamnfish

Ohh haklısın. Tabloda olduğu gibi en dipte olmadığı için tarih saatinde kaçırdım. : P
vallentin

6
not edin from datetime import datetime. Sadece yaparsan import datetimekullanman gerekecekdatetime.datetime.now().strftime("%H:%M:%S.%f")
JBaczuk

34

Yanlış belgelere bakıyorsunuz. timeModül farklı belgelerine sahiptir .

datetimeModülü şu şekilde kullanabilirsiniz strftime:

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

1
İşte datetime modülünün belgelerine bağlantı: docs.python.org/2/library/…
Bay Fooz

Gönderi için teşekkürler. Tarih saat ve zaman modülü neden var?
tommy.carstensen


9

Python'un timemodülü ile mikrosaniye alamazsınız %f.

Hala timesadece modül ile gitmek isteyenler için , işte bir geçici çözüm:

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 EET gibi bir şey almalısınız (evet, yeterince milisaniye kullanıyorum).

Kodu ayrıntılara ayırmak için aşağıdaki kodu bir Python konsoluna yapıştırın:

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

Açıklama amacıyla, Python 2.7.12 sonucumu da buraya yapıştırıyorum:

>>> 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
>>>

6

Bu işi yapmalı

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

Yazdıracak

HH:MM:SS.microseconds bunun gibi örneğin 14:38:19.425961


5

Ayrıca time, time()işlevini kullanarak modülden mikrosaniye hassasiyet elde edebilirsiniz .
( time.time()dönemden bu yana geçen zamanı saniye cinsinden döndürür. Kesirli kısmı, mikrosaniye cinsinden zamandır, istediğiniz şey budur.)

>>> 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
Mükemmel. Yardımların için teşekkür ederim. İşlerin çalışmasını sağlamayı başardım, ancak komut dosyasını belirli bir cset üzerinde sudo olarak çalıştırırken mikrosaniyelerin görünmediği anlamına gelen garip bir hata buldum, ancak belirli bir cset üzerinde çalıştırmayı denemeden önce sudo olarak oturum açarsam yaparım. Garip.
user820924

4

Mikro saniyeler için "% f" çalışmadığında, lütfen aşağıdaki yöntemi kullanın:

import datetime

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

3
Dt.microsecond 6 haneden azsa bu işe yaramaz.
M456

3
Bu benim için gerçekten işe yarayan tek çözümdü. Windows üzerindeki Jython'da% f her zaman bir% f yazıyor gibi görünüyor. Milisaniye kadar str (dt.microsecond) kullanılmasını istedim [0: 3]
Ed Randall

1
str (dt.microsecond) [0: 3] yanlış bir sonuç verebilir (ör. 300 mikrosaniye 0.300 milisaniyedir, ancak 300 yazdıracaktır!)
cabbi

3
"% 03d"% int (dt.microsecond / 1000) -> bu, milisaniyeleri yazdırır, mikrosaniyeleri değil
cabbi

0

Hız istiyorsanız, şunu deneyin:

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

precKesinlik nerede - kaç ondalık basamak istediğiniz. Lütfen burada sunulan diğer çözümlerde olduğu gibi işlevin kesirli kısımda önde gelen sıfırlarla ilgili sorunları olmadığını unutmayın.


-1

Bir tam sayı istiyorsanız, şu kodu deneyin:

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

Çıktı:

1545474382803
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.