5

Python: Преобразование datetime в строку без микросекунд

12

Я добавляю строки времени в формате 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 ответ(ов)

2

В вашем коде вы пытаетесь вывести текущее время без микросекунд, но используете 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.

1

Вы можете использовать метод 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.

0

Вот как я это делаю. Для получения даты и времени в формате 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'
0

Еще один вариант:

>>> 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'
0

Чтобы сохранить первые 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 символов, которые включают дату и время до секунд.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь