在Python中将日期转换为日期时间

992 投票
11 回答
726889 浏览
提问于 2025-04-15 17:14

在Python中,有没有现成的方法可以把一个date转换成datetime呢?比如说,想要得到某个日期的午夜时间(也就是00:00:00)。其实,把datetime转换成date很简单,因为datetime有个.date()的方法。

我真的需要手动去调用datetime(d.year, d.month, d.day)吗?

11 个回答

131

这个被接受的答案是对的,但我更倾向于不使用 datetime.min.time(),因为我不太明白它到底是干什么的。如果你明白,那就太好了。我对 timetuple 方法和依赖顺序的做法也有同样的感觉。

在我看来,最清晰、最直接的方法是这样做,不用依赖读者对 datetime 模块的API非常熟悉:

from datetime import date, datetime
today = date.today()
today_with_time = datetime(
    year=today.year, 
    month=today.month,
    day=today.day,
)

这就是我对“明确比隐含更好”的看法。

215

有几种方法可以做到这一点,不过我觉得你提到的那种(虽然你不喜欢)是最容易理解的。

>>> import datetime
>>> t=datetime.date.today()
>>> datetime.datetime.fromordinal(t.toordinal())
datetime.datetime(2009, 12, 20, 0, 0)

>>> datetime.datetime(t.year, t.month, t.day)
datetime.datetime(2009, 12, 20, 0, 0)

>>> datetime.datetime(*t.timetuple()[:-4])
datetime.datetime(2009, 12, 20, 0, 0)

接下来就是这样——但基本上它们都依赖于从date对象中正确提取信息,然后把这些信息放回到适合的构造函数或类函数中,用于datetime

1242

你可以使用 datetime.combine(date, time) 这个方法来把日期和时间结合起来。为了时间部分,你可以创建一个 datetime.time 对象,并把它设置为午夜,也就是00:00。

from datetime import date
from datetime import datetime

dt = datetime.combine(date.today(), datetime.min.time())

撰写回答