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 экземпляры, которые он получает, будут включать компоненты микросекунды.
9 ответов:
>>> 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]
Comments