协慌网

登录 贡献 社区

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

是否有一个内置的方法的转换datedatetime在 Python,例如获取datetime在指定日期的午夜?相反的转换很容易: datetime有一个.date()方法。

我真的必须手动调用datetime(d.year, d.month, d.day)吗?

答案

您可以使用datetime.combine(date, time) ; 对于该时间,您创建一个初始化为午夜datetime.time

from datetime import date
from datetime import datetime

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

尽管我确实相信您提到(和不喜欢)的方法是最容易理解的一种方法,但是有几种方法。

>>> 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对象和春耕它放回合适的构造函数或 classfunction 的datetime

可接受的答案是正确的,但是我宁愿避免使用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,
)

这就是我对 “明确胜于隐含” 的看法。