#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 цифр.