Я хочу получить datetime
строку с датой в миллисекундах. Этот код типичен для меня, и мне не терпится узнать, как его сократить.
from datetime import datetime
timeformatted= str(datetime.utcnow())
semiformatted= timeformatted.replace("-","")
almostformatted= semiformatted.replace(":","")
formatted=almostformatted.replace(".","")
withspacegoaway=formatted.replace(" ","")
formattedstripped=withspacegoaway.strip()
print formattedstripped
python
datetime
string-formatting
Jurudocs
источник
источник
Instant.parse
может анализировать представление, созданное с помощьюstrftime('%Y-%m-%dT%H:%M:%S.%fZ')
Ответы:
Чтобы получить строку даты с миллисекундами (3 десятичных знака после секунд), используйте это:
Примечание. Для Python3
print
требуются скобки:источник
2013-08-23 10:18:32.926
это результатprint datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
.import datetime
вместоfrom datetime import datetime
, вы должны будете использовать это:datetime.datetime.utcnow().strftime("%H:%M:%S.%f")
С Python 3.6 вы можете использовать:
Вывод:
Более подробная информация здесь: https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat
источник
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
источник
[:-3]
в конец последние 3 цифры, чтобы отображались только миллисекунды.@Cabbi поднял вопрос о том, что в некоторых системах формат микросекунд
%f
может дать"0"
, так что невозможно просто отрубить последние три символа.Следующий код тщательно форматирует метку времени с миллисекундами:
Пример вывода:
Чтобы получить точный вывод, который хотел ОП, нам нужно убрать знаки препинания:
Пример вывода:
источник
Вероятно, так:
источник
%m
должно быть%M
, потому что это минуты, а не месяцы.Я предполагаю, что вы имеете в виду, что вы ищете что-то более быстрое, чем datetime.datetime.strftime (), и по сути извлекаете не-альфа-символы из временной метки utc.
Ваш подход немного быстрее, и я думаю, что вы можете ускорить процесс, нарезав строку:
источник
результат
Использование translate () и метода нарезки, выполняемых одновременно,
translate () дает преимущество, которое можно использовать в одной строке
Сравнивая время на основе первого:
источник
Я имел дело с той же проблемой, но в моем случае было важно, чтобы миллисекунда была округлена, а не усечена.
источник
источник
источник
источник
Проблема с
datetime.utcnow()
другими решениями заключается в том, что они медленные.Более эффективное решение может выглядеть так:
Где
prec
бы3
в вашем случае (миллисекунды).Функция работает до 9 знаков после запятой (обратите внимание на номер
9
во второй строке форматирования).Если вы хотите округлить дробную часть, я бы предложил строить
"%.9f"
динамически с желаемым количеством десятичных знаков.источник