Я добавляю строки времени 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
полученные экземпляры будут включать микросекундные компоненты.
источник
.isoformat()
, который по умолчанию включает микросекунды. Если это то, что вам нужно, проясните это. Каждый сразу поймет, что делает этот код. Вряд ли кто-то поймет другой код, не взглянув на документацию.источник
.isoformat([sep])
- Вернуть строку, представляющую дату и время в формате ISO 8601, ГГГГ-ММ-ДДТЧ: ММ: СС.мммммм или, если микросекунда равна 0, ГГГГ-ММ-ДДЧЧ: ММ: СС "В Python 3.6:
https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat
источник
Это способ, которым я делаю это. Формат ISO:
Вы можете заменить 'T', если вы не хотите формат ISO:
источник
.isoformat()
болееunicode()
?unicode()
, и если вы хотите ISO-8601, используйтеisoformat()
unicode()
удобнее чем.isoformat().replace('T', ' ')
, конечно. ;)isoformat
принимает спецификатор разделителя, поэтому замена не должна производиться. просто сделать:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
Еще один вариант:
По умолчанию здесь используется местное время, если вам нужно UTC, вы можете использовать следующее:
источник
Оставьте первые 19 символов, которые вы хотели с помощью нарезки:
источник
+05:30
. Правильно было быstr(now())[:19]
.10000
будет пропущенаЯ обычно делаю:
вывод:
источник
Поскольку не во всех
datetime.datetime
экземплярах есть микросекундный компонент (т. Е. Когда он равен нулю), вы можете разбить строку на «.» и возьмите только первый элемент, который всегда будет работать:источник
Мы можем попробовать что-то вроде ниже
источник
.isoformat(' ', 'seconds')
, чем предложено в предыдущем ответе.Я нашел это самым простым способом.
источник
Я использую это, потому что я могу понять и, следовательно, лучше помнить это (и формат даты и времени также может быть настроен на основе вашего выбора): -
источник