如何将python日期时间转换为字符串,具有可读格式的日期?

TIM*_*MEX 163 python datetime string-formatting

t = e['updated_parsed']
dt = datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]
print dt
>>>2010-01-28 08:39:49.000003
Run Code Online (Sandbox Code Playgroud)

如何将其转换为字符串?:

"January 28, 2010"
Run Code Online (Sandbox Code Playgroud)

Cri*_*ian 230

datetime类有一个方法strftime.Python文档记录了它接受的不同格式:

对于这个具体的例子,它看起来像:

my_datetime.strftime("%B %d, %Y")
Run Code Online (Sandbox Code Playgroud)


Aut*_*act 109

以下是使用python的一般格式化功能完成相同的操作...

>>>from datetime import datetime
>>>"{:%B %d, %Y}".format(datetime.now())
Run Code Online (Sandbox Code Playgroud)

此处使用的格式字符与strftime使用的格式字符相同.不要错过: 格式说明符中的前导.

在大多数情况下,使用format()而不是strftime()可以使代码更易读,更容易编写并与生成格式化输出的方式一致...

>>>"{} today's date is: {:%B %d, %Y}".format("Andre", datetime.now())
Run Code Online (Sandbox Code Playgroud)

将上面的内容与以下strftime()替代进行比较......

>>>"{} today's date is {}".format("Andre", datetime.now().strftime("%B %d, %Y"))
Run Code Online (Sandbox Code Playgroud)

而且,以下不会起作用......

>>>datetime.now().strftime("%s %B %d, %Y" % "Andre")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    datetime.now().strftime("%s %B %d, %Y" % "Andre")
TypeError: not enough arguments for format string
Run Code Online (Sandbox Code Playgroud)

等等...

  • 我一直想知道在这种情况下使用 format() 比 strftime() 有什么好处。除了个人喜好之外,这两种方法是否还有其他好处?性能差异是什么? (2认同)
  • @Andre感谢您的提问!个人偏好通常以经验为指导.请参阅我更新的答案,为什么我更喜欢格式()而不是strftime().性能和Python是两个不能很好地结合在一起的词.如果我决定使用Python,我不会过分关注性能.当我需要性能时,我会使用一些静态类型的高性能语言. (2认同)
  • 大多数情况下格式化方法更简单。比较: `print '今天是 {:%B %d, %Y}'.format(datetime.now())` 与 `print '今天是 {}'.format(datetime.now().strftime('%) B %d, %Y')`。无论如何,当您使用 format() 方法时,为什么不将它也用于日期格式化呢? (2认同)

Nat*_*tim 23

在Python 3.6+中使用f-strings.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Run Code Online (Sandbox Code Playgroud)

  • 好的。我有 Python 3.5.1。这就是为什么。感谢您的澄清。 (2认同)

hir*_*ist 16

很老的问题,我知道.但是使用新的f-strings(从python 3.6开始)有新的选择.所以这里是为了完整性:

from datetime import datetime

dt = datetime.now()

# str.format
strg = '{:%B %d, %Y}'.format(dt)
print(strg)  # July 22, 2017

# datetime.strftime
strg = dt.strftime('%B %d, %Y')
print(strg)  # July 22, 2017

# f-strings in python >= 3.6
strg = f'{dt:%B %d, %Y}'
print(strg)  # July 22, 2017
Run Code Online (Sandbox Code Playgroud)

strftime()strptime()行为解释了格式说明符的含义.


S.L*_*ott 11

阅读官方文档中的strfrtime.


Sup*_*ova 6

Python datetime对象有一个方法属性,以可读格式打印.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
Run Code Online (Sandbox Code Playgroud)