Python: Преобразование datetime в строку без микросекунд
Я добавляю строки времени в формате UTC в ответы API Bitbucket, которые в данный момент содержат только строки времени, соответствующие Амстердаму (!). Для обеспечения согласованности с другими строками времени в формате UTC, нужный формат - это <code>2011-11-03 11:07:04</code>
(за которым следует <code>+00:00</code>
, но это не столь важно).
Какой лучший способ создать такую строку (без компонента микросекунды) из экземпляра <code>datetime</code>
, который содержит компонент микросекунды?
>>> import datetime
>>> print(unicode(datetime.datetime.now()))
2011-11-03 11:13:39.278026
Я добавлю лучший вариант, который пришел мне в голову, как возможный ответ, но вполне возможно, что существует более элегантное решение.
Правка: Должен упомянуть, что я не на самом деле распечатываю текущее время – я использовал <code>datetime.now</code>
, чтобы привести быстрый пример. Поэтому решение не должно предполагать, что любые экземпляры <code>datetime</code>
, которые оно получает, будут содержать компоненты микросекунд.
5 ответ(ов)
В вашем коде вы пытаетесь вывести текущее время без микросекунд, но используете unicode
, что может вызвать ошибку в Python 3. Чтобы правильно отформатировать дату и время, вам следует использовать str()
или метод форматирования. Вот исправленный пример:
import datetime
now = datetime.datetime.now()
# Убираем микросекунды
now_without_microseconds = now.replace(microsecond=0)
# Приводим к строке
print(str(now_without_microseconds))
Если вы хотите вывести дату в определённом формате, вы можете использовать метод strftime
:
print(now_without_microseconds.strftime('%Y-%m-%d %H:%M:%S'))
Теперь код будет работать корректно и выводить текущее время без микросекунд в формате YYYY-MM-DD HH:MM:SS
.
Вы можете использовать метод isoformat
объекта datetime
, чтобы получить строковое представление текущей даты и времени в формате ISO 8601. В вашем примере используется Python 3.6 и метод isoformat
с двумя аргументами: первым аргументом задается символ, который будет использоваться в качестве разделителя между датой и временем (в данном случае — пробел), а вторым — точность (в данном случае — до секунд).
Вот пример кода:
from datetime import datetime
now = datetime.now().isoformat(' ', 'seconds')
print(now)
Этот код выведет текущую дату и время в формате YYYY-MM-DD HH:MM:SS
, например:
'2017-01-11 14:41:33'
Дополнительные подробности о методе isoformat
можно найти в документации Python.
Вот как я это делаю. Для получения даты и времени в формате ISO можно использовать следующий код:
import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Возвращает: '2017-01-23T14:58:07'
Если вам не нужен формат ISO, вы можете заменить 'T' на пробел:
datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Возвращает: '2017-01-23 15:05:27'
Еще один вариант:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'
По умолчанию используется местное время. Если вам нужно время в UTC, вы можете воспользоваться следующим кодом:
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
Чтобы сохранить первые 19 символов строки, вы можете использовать срезы в Python. Вот пример, который демонстрирует, как это сделать с помощью текущей даты и времени:
import datetime
# Получаем текущее время
current_time = str(datetime.datetime.now())
# Срезаем строку до первых 19 символов
result = current_time[:19]
print(result) # Вывод: '2023-10-03 14:37:50' (пример)
Этот код сначала импортирует модуль datetime
, чтобы получить текущее время с помощью datetime.datetime.now()
, затем преобразует его в строку и срезом [:19]
оставляет лишь первые 19 символов, которые включают дату и время до секунд.
Как преобразовать datetime в date?
Как конвертировать секунды в часы, минуты и секунды?
Как рассчитать количество дней между двумя заданными датами
Как вывести дату в стандартном формате?
Итерация по диапазону дат в Python