我正在添加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。现在提供一个简单的例子。因此,解决方案不应假定它接收到的任何datetime实例将包含微秒组件。


当前回答

保留前19个字符,你想通过切片:

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

其他回答

还有另一个选择:

>>> 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'

不含微秒组件的当前时间戳:

timestamp = list(str(datetime.timestamp(datetime.now())).split('.'))[0]

您也可以使用以下方法

import datetime as _dt

ts = _dt.datetime.now().timestamp()
print("TimeStamp without microseconds: ", int(ts)) #TimeStamp without microseconds:  1629275829

dt = _dt.datetime.now()
print("Date & Time without microseconds: ", str(dt)[0:-7]) #Date & Time without microseconds:  2021-08-18 13:07:09

我就是这么做的。ISO格式:

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

如果你不想要ISO格式,你可以替换“T”:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'

从Python 3.6+开始,最好的方法是为isoformat添加新的timespec参数。

isoformat(timespec='seconds', sep=' ')

用法:

>>> datetime.now().isoformat(timespec='seconds')
'2020-10-16T18:38:21'
>>> datetime.now().isoformat(timespec='seconds', sep=' ')
'2020-10-16 18:38:35'