Ответ 1
>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
Я добавляю строки времени 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
Я добавлю лучший вариант, который возник для меня как возможный ответ, но может быть более элегантное решение.
Изменить: Я должен упомянуть, что я на самом деле не печатаю текущее время - я использовал datetime.now
, чтобы предоставить быстрый пример. Поэтому решение не должно предполагать, что любые экземпляры datetime
, которые он получает, будут включать в себя микросекундные компоненты.
>>> 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 import datetime
now = datetime.now(). strftime ( "% Y-% m-% d_% H:% M:% S.% f" )
Я нашел это самым простым способом.
>>> 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'
>>>
Я обычно делаю:
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