web-dev-qa-db-ja.com

Pythonのstrftime()で%fを使用してマイクロ秒を取得する

私はstrftime()をマイクロ秒の精度で使用しようとしていますが、これは%fを使用して可能です( here )。ただし、次のコードを試すと:

import time
import strftime from time

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

...時、分、秒を取得しますが、%fは%fとして印刷され、マイクロ秒の兆候はありません。 UbuntuでPython 2.6.5を実行しているので、問題なく、%fをサポートする必要があります(私が知る限り、2.6以降でサポートされています)。

101
user820924

これを取得するには、datetimeのstrftime関数を使用できます。問題は、時間のstrftimeがマイクロ秒情報を運ばないタイムタプルを受け入れることです。

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

トリックを行う必要があります!

158
adamnfish

間違ったドキュメントを見ています。 timeモジュール 異なるドキュメントがあります

datetimeモジュール strftime を次のように使用できます。

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

これは仕事をする必要があります

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

印刷します

HH:MM:SS.microsecondsこのような例14:38:19.425961

6
salah Laaroussi

Pythonの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 EETのようなものを取得する必要があります(はい、かなり十分なのでミリ秒を使用します)。

コードを詳細に分解するには、以下のコードをPythonコンソールに貼り付けます:

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

明確にするために、Python 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
>>>
4
baltasvejas

マイクロ秒の「%f」が機能しない場合は、次の方法を使用してください。

import datetime

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

速度が必要な場合は、これを試してください:

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は精度です。小数点以下の桁数を指定します。ここで紹介する他のソリューションのように、この関数には小数部の先行ゼロに関する問題がないことに注意してください。

0
mato