类型错误:尝试将字典中的日期时间对象转换为字符串时,需要一个整数(类型为 datetime.datetime)

Chu*_*lus 1 python datetime dictionary python-3.x

所以我在 Python 3.7.4 中使用用户输入的日期,这些日期由另一个程序以字典格式存储在变量中。这些可能是最近的任何日期。例如,2019 年 11 月 6 日如下所示:

{'Select start date': datetime.datetime(2019, 11, 6, 0, 0)}
Run Code Online (Sandbox Code Playgroud)

我不关心项目标签,但我想将此字典日期转换为 2019 年 11 月 6 日的格式(我知道是strftime('%d %b %Y')),但我不确定如何让它理解上面是日期时间对象并在它实际上是字典对象时对其进行转换,并且不会抛出错误。

我已经在这里阅读了很多关于此的内容,但这里几乎所有的问题都只关注今天的日期(如此datetime.datetime.now()使用)或特定日期,而不是用户输入的可能会有所不同的日期,并且存在于字典中。我已经看到很多这样的东西:

import datetime
d = datetime.datetime(2019, 11, 06, 0, 0, 0, 000000)
d.strftime("%a %b %d %Y %H:%M:%S %z")
Run Code Online (Sandbox Code Playgroud)

...但它似乎并不完全适用于这种情况。由于字典格式,像strftimestrptime这样的命令似乎不起作用,而且我不能使用像上面这样的静态示例,因为我要转换的实际日期并不总是相同的。如何在不使用字符串操作的情况下进行一些疯狂的工作?我觉得我缺少一个非常简单的解决方案。

代码示例(不起作用):

import datetime

dic = {'Select start date': datetime.datetime(2019, 11, 7, 0, 0)}

for key, value in dic.items():
     d = datetime.datetime(value)
     d.strftime("%d %b %Y")   
Run Code Online (Sandbox Code Playgroud)

产生错误:

TypeError: an integer is required (got type datetime.datetime)
Run Code Online (Sandbox Code Playgroud)

Spe*_*cer 5

我现在明白发生了什么。该行d = datetime.datetime(value)是问题所在,您将一个日期时间对象传递给该datetime.datetime()方法,这就是您得到 valueError 的原因。这是不必要的,因为您已经从字典中获取了一个日期时间对象,因此没有理由构建一个新对象。这是固定代码:

import datetime

dic = {'Select start date': datetime.datetime(2019, 11, 7, 0, 0)}

for key, datetime_obj in dic.items():
     datetime_str = datetime_obj.strftime("%d %b %Y")
     print(datetime_str)
Run Code Online (Sandbox Code Playgroud)

一种简单的调试方法是使用type(). 例如:

for key, value in dic.items():
    print(type(value))
Run Code Online (Sandbox Code Playgroud)

会给你<classdatetime.datetime >。查看 datetime.datetime()的文档会告诉你这个方法只接受整数。