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

我真的需要手动调用datetime(d。年,月,日)?


当前回答

你可以使用date.timetuple()方法和解包操作符*。

args = d.timetuple()[:6]
datetime.datetime(*args)

其他回答

你可以使用easy_date来简化:

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)

toisoformat/fromisoformat的替代方案:您可以使用date。Toordinal和datetime.fromordinal:

import datetime

start_date = datetime.date(1991, 2, 20)
start_date_midnight = datetime.datetime.fromordinal(start_date.toordinal())

我怀疑这比转换到/从字符串更有效。

你可以这样测试这个过程:

def test_datetime_from_date():
    for x in range(1,1000000):
        date_ = datetime.date.fromordinal(x)
        datetime_ = datetime.datetime.fromordinal(date_.toordinal())
        datetime_iso_date, t, datetime_iso_time = datetime_.isoformat().partition("T")
        assert datetime_iso_date == date_.isoformat()

有几种方法,尽管我相信你提到的(和不喜欢的)是最易读的。

>>> 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的适当的ctor或类函数中。

你可以使用date.timetuple()方法和解包操作符*。

args = d.timetuple()[:6]
datetime.datetime(*args)

今天是2016年,我认为熊猫提供了最干净的解决方案。

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

时间戳是熊猫版的datetime,在大多数情况下可以与它互换。检查:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

但如果你真的想要一个香草日期时间,你仍然可以这样做:

pd.Timestamp(d).to_datetime()

在处理时区时,时间戳比datetimes强大得多。实际上,时间戳是如此强大,以至于遗憾的是它们的文档记录如此之少……