将字符串转换为不带时间的日期对象

18 投票
1 回答
36366 浏览
提问于 2025-04-18 04:28

我想把一个字符串转换成Python的日期对象。我使用了 d = datetime.strptime("25-01-1973", "%d-%m-%Y"),这个方法在官方文档上有说明,结果是 datetime.datetime(1973, 1, 25, 0, 0)

当我用 d.isoformat() 时,得到的结果是 '1973-01-25T00:00:00',但我想要的是 1973-01-25(不带时间信息),这在文档中也有提到:

date.isoformat()
Return a string representing the date in ISO 8601 format, ‘YYYY-MM-DD’. For example, date(2002, 12, 4).isoformat() == '2002-12-04'.

我知道可以使用SimpleDateFormat等方法,但因为文档中明确提到了 isoformat() 的例子,所以我不明白为什么在日期后面还会有不需要的时间信息。

我想我可能漏掉了什么细节?

1 个回答

27

通过 datetime.datetime.strptime 得到的对象是一个 datetime.datetime 对象,而不是 datetime.date 对象。这意味着它包含了时间的信息,当你调用 isoformat() 时,这些时间信息也会被包含在内。

你可以使用 datetime.datetime.date() 方法将其转换为 date 对象,方法如下。

import datetime as dt

d = dt.datetime.strptime("25-01-1973", "%d-%m-%Y")

# Convert datetime object to date object.
d = d.date()

print(d.isoformat())
# 1973-01-25

撰写回答