Как использовать миллисекунды вместо микросекунд в datetime python

#python #datetime

#python #datetime

Вопрос:

Клиент указал, что они используют DateTime для хранения своих дат с использованием формата 2021-06-22T11:17:09.465Z , и до сих пор я мог получить его только в строковых датах, потому что, если я хочу сохранить миллисекунды, это сохраняет их как 2021-06-22T11:17:09.465000 .

Есть ли какой-либо возможный способ заставить DateTime использовать миллисекунды вместо микросекунд? Я знаю о %f течение микросекунд в формате, но я перепробовал все, что мог придумать, чтобы уменьшить эти 3 десятичных знака, сохраняя при этом дату и время, однако безрезультатно.

Спасибо.

Комментарии:

1. Поскольку я вижу ваш комментарий в другом ответе, вам нужно показать, что вы пробовали до сих пор, потому что есть много путаницы. Конец обзора.

Ответ №1:

Я предлагаю использовать параметр timespec, как описано в документах python https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat:

 >>> from datetime import datetime
>>> datetime.now().isoformat(timespec='minutes')   
'2002-12-25T00:00'
>>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
>>> datetime.now().isoformat(timespec='milliseconds')
'2021-12-02T14:03:57.937'
 

Комментарии:

1. Спасибо за предложения, к сожалению, isoformat возвращает строку, и мне нужен полный объект datetime

2. Я в замешательстве. Используя объект datetime, вы можете получить представление iso с любой необходимой вам точностью. Вы говорите о разборе строки в объект datetime?

3. @JavierRomero. — Как правило, вы должны использовать datetime для внутреннего представления с микросекундами (включая дополнительные 000 ); и требуемый формат для ввода и вывода в виде строк с требуемой точностью

Ответ №2:

Что-то вроде этого работает:

 from datetime import datetime
dt = datetime.now()
print(f"{dt:%Y/%m/%dT%H:%M:%S}.{f'{dt:%f}'[:3]}")
 

Надеюсь, я помогу.

Комментарии:

1. Спасибо, но это приведет к появлению строки, а мне нужен объект datetime.

Ответ №3:

Я полагаю, вы ищете это? См. Также Мой общий комментарий по вопросу.

Переменную 3 в [:3] можно настроить по своему вкусу для количества нулей в диапазоне от мс до ns. Используйте type() , чтобы показать вам его объект DateTime.

 import time
from datetime import datetime

tm = time.time()

print(tm)

dt = str(tm).split('.')

print(dt)

timestamp = float(dt[0]   '.'   dt[1][:3]) 

dt_object = datetime.fromtimestamp(timestamp)

print(dt_object)
 

Это печатает, например:

 tm : 1638463260.919723

dt : ['1638463260', '919723']
 

и

 dd_object : 2021-12-02 17:41:00.919000
 

Ответ №4:

Вы можете разделить наносекунды на 1000000000, чтобы получить секунды, и на 1000000, чтобы получить миллисекунды.

Вот некоторый код, который получит наносекунды:

 tim = time.time_ns()
 

Затем вы можете объединить вывод этого с остальной частью формата. Вероятно, не самое чистое решение, но оно должно работать.

Комментарии:

1. Примечание: деление на 1_000_000 может привести к потере точности. Числа с плавающей запятой имеют точность 15 цифр.