Python datetime to string without microsecond component

时间:2011-11-03 18:18:12

标签: python datetime datetime-format

我正在将UTC时间字符串添加到目前仅包含Amsterdam(!)时间字符串的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实例都包含微秒组件。

13 个答案:

答案 0 :(得分:730)

如果要格式化与标准格式不同的特定格式的datetime对象,最好明确指定该格式:

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

有关%指令的说明,请参阅the documentation of datetime.strftime()

答案 1 :(得分:146)

>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07

答案 2 :(得分:46)

在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

答案 3 :(得分:35)

这就是我这样做的方式。 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'

答案 4 :(得分:16)

又一个选择:

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

答案 5 :(得分:14)

通过切片保留您想要的前19个字符:

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

答案 6 :(得分:6)

由于并非所有datetime.datetime个实例都有一个微秒组件(即当它为零时),您可以将字符串分区为“。”并只采取第一项,这将始终有效:

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

答案 7 :(得分:2)

我通常这样做:

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

答案 8 :(得分:2)

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

答案 9 :(得分:1)

我们可以尝试下面的内容

import datetime

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

答案 10 :(得分:1)

>>> from datetime import datetime
>>> dt = datetime.now().strftime("%Y-%m-%d %X")
>>> print(dt)
'2021-02-05 04:10:24'

答案 11 :(得分:0)

我发现这是最简单的方法。

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

答案 12 :(得分:-1)

之所以使用它,是因为我能更好地理解并记住它(日期时间格式也可以根据您的选择进行自定义):-

import datetime
moment = datetime.datetime.now()
print("{}/{}/{} {}:{}:{}".format(moment.day, moment.month, moment.year,
                                 moment.hour, moment.minute, moment.second))