Python datetime to string без микросекундного компонента



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



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



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


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



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

829   9  

9 ответов:

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07

вот как я это делаю. Формат 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'

В 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

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

>>> 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 символов, которые вы хотели с помощью нарезки:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'

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

unicode(datetime.datetime.now()).partition('.')[0]

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

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]

из datetime импорт datetime
сейчас = дата и время.теперь.)(strftime ("%Y-%m-%d_%H:%M:%S.%f")

Comments

    Ничего не найдено.