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


112

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

import time
import strftime from time

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

...時間、分、秒を取得しますが、%fはマイクロ秒の符号なしで%fと出力します。私はUbuntuでPython 2.6.5を実行しているので、問題なく、%fがサポートされているはずです(私の知る限り、2.6以降でサポートされています)。

回答:


181

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

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

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


1
使用したくない場合%z
バレンティン2017

@Vallentinかなり正反対です!時間は表示されませんがdatetime %zディレクティブサポートます。
adamnfish 2017

%zPython 3での両方のサポート:-) ここに日時時間があります
adamnfish

おお、あなたは正しい。時間のテーブルのように、一番下になかったので、私はそれをdatetimeに逃しました。:P
バレンティン2017

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'

1
ここでdatetimeモジュールのドキュメントへのリンクです:docs.python.org/2/library/...は
氏Fooz

投稿ありがとうございます。なぜ日時モジュールがあるのですか?
tommy.carstensen 2015年


9

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

6

これでうまくいくはずです

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

印刷されます

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


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
優れた。あなたのすべての協力に感謝します。特定のcsetでスクリプトを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桁未満の場合は機能しません。
M456 2014年

3
これは、実際に私のために働いた唯一の解決策でした。Windows上のJythonでは、%fは常​​にリテラル%fを出力するようです。ミリ秒が欲しかったので、str(dt.microsecond)[0:3]を使用しました
Ed Randall

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.