愚蠢的问题,但有将date转换为datetime在 Python 中,ie 的内置方法。datetime获取date的午夜?相反的转换是很容易-datetime有一个.date()方法。我真的需要手动调用datetime(d.year, d.month, d.day) ?

2009-12-21 00:26:01
问题评论:

不是一个愚蠢的问题;date 对象应该有一个.datetime()方法;可笑的是,它们没有这种方法。

@Zags︰ 或datetime.from_date()构造函数。

@J.F.Sebastian︰ 只不过存在这样的方法。

@DavidNemeskey︰ 读取批注答复的 Zags 的注释。是关于哪种方法应该存在的。

@J.F.Sebastian︰ 我也不知道如何我错过了,...,我完全同意。

回答:

您可以使用datetime.combine(日期、 时间);时,您将创建一个datetime.time对象,该对象初始化为午夜。

from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())

谢谢。结合 time() 返回 (0,0) 我认为这方面的事实出彻底︰ datetime.combine(d, time())

只是注意不要使您的代码会 datetime.time() 与 time.time() 感到困惑。限定的名称 FTW !

是的问题问得好。幸运的是,combine() 引发异常,如果传入time.timedatetime.time以外的其他任何内容.

午夜,有是一个 python 常量 datetime.time.min (2.7.1+) 或 datetime.min.time() (旧 python)

很好的解决方案,但我不认为 datetime.min.time() 的 00:00:00 时的最简便方法。这是因为它的作用第一次检索表示的日期时间,然后获取其时间组件的最小值。顺便说一下,datetime.min = 日期时间 (MINYEAR,1,1,tzinfo = 无) 并且有时间为 00:00:00。但是,我认为它是清理程序显式创建通过 time.min 00:00:00 时或 0,0,0 (0) 的时间。

有几种方法,尽管我确实相信说 (和不喜欢) 是可读性最强的一个。

>>> 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对象中提取信息和 ploughing 它返回到合适的构造函数或 classfunctiondatetime.

很好点。datetime(d.year, d.month, d.day)似乎比接受答案更好的可读性datetime.combine(d, datetime.min.time()).

@SimonTewsi:midnight = datetime.datetime.combine(d, datetime.time.min)看起来更整洁 (建议的@larham1)

@J.F.Sebastian︰ 某种程度上更清晰,但我同意 Wes Winham 在他的回答,它需要读者了解什么 datetime.time.min 表示。而我看来,似乎,是较为明显datetime(d.year, d.month, d.day)(日期时间不时间分量)。它是一个小点,不过,从而使用的变量的名称,如"午夜"明显结果是即使读者并不知道什么datetime.time.min表示。

@SimonTewsi︰ 注意︰datetime(d.year, d.mont, d.day)是不只有更加明显,它是太快.

您可以使用 timetuple() 方法和 varargs。

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

尽管聪明,顺便说一句。

这是适合我的情况很有用。我不知道是否它是某个日期时间我正在被传递,并且不很 pythonic,要检查它是哪个类。此方法看起来好像它适用于日期时间和日期的对象。

我用来发现datetime.combine @kiamlaluno 的答案通过之前使用此。我认为这是相当 pythonic,尤其是给定构造datetime.time对象很可能以类似datetime.time(*map(int,"H:M:S".split(":")))吗...

已接受的答案是正确的但希望避免使用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,
)

这就是我带上"明确是优于隐式"。

并为原始创意 Kyle Gibson 帽提示︰ stackoverflow.com/users/513197/kyle-gibson

您可以使用easy_date方便︰

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
内容来源于Stack Overflow Convert date to datetime in Python
请输入您的翻译

Convert date to datetime in Python

确认取消