Использование% f с strftime () в Python для получения микросекунд - PullRequest
101 голосов
/ 13 июля 2011

Я пытаюсь использовать strftime () с точностью до микросекунды, что кажется возможным при использовании% f (как указано здесь ).Однако, когда я пытаюсь использовать следующий код:

import time
import strftime from time

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

... я получаю часы, минуты и секунды, но% f печатается как% f без признаков микросекунд.Я использую Python 2.6.5 в Ubuntu, так что все должно быть в порядке, и% f должен поддерживаться (насколько я знаю, он поддерживается для 2.6 и выше)

Ответы [ 7 ]

158 голосов
/ 13 июля 2011

Вы можете использовать функцию datetime strftime, чтобы получить это.Проблема в том, что strftime time принимает кортеж, который не несет микросекундную информацию.

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

Должен помочь!

32 голосов
/ 13 июля 2011

Вы смотрите не ту документацию.Модуль time имеет различную документацию .

Вы можете использовать модуль datetime strftime следующим образом:

>>> from datetime import datetime
>>>
>>> now = datetime.now()
>>> now.strftime("%H:%M:%S.%f")
'12:19:40.948000'
6 голосов
/ 29 апреля 2014

Это должно сделать работу

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

Будет напечатано

HH:MM:SS.microseconds, например, 14:38:19.425961

5 голосов
/ 13 июля 2011

Вы также можете получить микросекундную точность от модуля 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)
4 голосов
/ 16 января 2017

С модулем 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
>>>

Надеюсь, это поможет.

2 голосов
/ 24 июня 2013

Если «% f» для микросекунд не работает, используйте следующий метод

import datetime

def getTimeStamp():
    dt = datetime.datetime.now()
    return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond)
0 голосов
/ 22 декабря 2018

Если вам нужно целое число, попробуйте этот код:

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

Выход:

1545474382803
...