Python datetime в строку без микросекундного компонента - PullRequest
355 голосов
/ 03 ноября 2011

Я добавляю строки времени UTC к ответам Bitbucket API, которые в настоящее время содержат только строки времени Амстердама (!).Для согласованности со строками времени UTC, возвращенными в другом месте, желаемый формат: 2011-11-03 11:07:04 (за которым следует +00:00, но это не так).

Какой лучший способ создать такую ​​строку ( без микросекундный компонент) из datetime экземпляра с микросекундным компонентом?

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

Я добавлю лучший вариант, который мне пришёл в качестве возможного ответа, новполне может быть более элегантное решение.

Редактировать: Я должен отметить, что я не на самом деле печатаю текущее время - я использовал datetime.now, чтобы обеспечитьбыстрый пример.Таким образом, решение не должно предполагать, что любые полученные datetime экземпляры будут включать микросекундные компоненты.

Ответы [ 10 ]

743 голосов
/ 03 ноября 2011

Если вы хотите отформатировать datetime объект в определенном формате, который отличается от стандартного формата, лучше явно указать этот формат:

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

См. документацию datetime.strftime() для объяснения директив %.

149 голосов
/ 03 ноября 2011
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
50 голосов
/ 11 января 2017

В Python 3.6:

from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'

https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat

38 голосов
/ 23 января 2017

Вот как я это делаю. Формат ISO:

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'

Вы можете заменить 'T', если вы не хотите формат ISO:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
17 голосов
/ 03 ноября 2011

Еще одна опция:

>>> 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'
16 голосов
/ 03 ноября 2011

Оставьте первые 19 символов, которые вы хотели, используя нарезку:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
7 голосов
/ 03 ноября 2011

Поскольку не все экземпляры datetime.datetime имеют микросекундный компонент (т. Е. Когда он равен нулю), вы можете разбить строку на "." и возьмите только первый элемент, который всегда будет работать:

unicode(datetime.datetime.now()).partition('.')[0]
3 голосов
/ 13 января 2019

Я обычно делаю:

import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0)  # To print now without microsecond.

# To print now:
print(now)

выход:

2019-01-13 14:40:28
3 голосов
/ 01 февраля 2018

Мы можем попробовать что-то вроде ниже

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
1 голос
/ 30 ноября 2018

Я нашел, что это самый простой способ.

>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
>>> 
...