是否有一个内置的转换方法date
为datetime
在Python,例如获得datetime
在指定日期的午夜?相反的转换很容易:datetime
有一个.date()
方法。
我真的必须手动打电话datetime(d.year, d.month, d.day)
吗?
datetime.from_date()
构造函数。
是否有一个内置的转换方法date
为datetime
在Python,例如获得datetime
在指定日期的午夜?相反的转换很容易:datetime
有一个.date()
方法。
我真的必须手动打电话datetime(d.year, d.month, d.day)
吗?
datetime.from_date()
构造函数。
Answers:
您可以使用datetime.combine(date, time)
;现在,您创建一个datetime.time
初始化为午夜的对象。
from datetime import date
from datetime import datetime
dt = datetime.combine(date.today(), datetime.min.time())
datetime.combine(d, time())
time.time
或除以外的其他值,combin()会引发异常datetime.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
对象中适当地提取信息并将其犁入合适的ctor或classfunction中datetime
。
datetime(d.year, d.month, d.day)
确实比接受的答案更具可读性datetime.combine(d, datetime.min.time())
。
datetime(d.year, d.month, d.day)
更明显(没有时间成分的日期时间)。不过,这只是次要点,即使读者不知道datetime.time.min
代表什么,使用“ midnight”之类的变量名称也可以清楚地知道结果是什么。
datetime(d.year, d.mont, d.day)
不仅更明显,而且速度更快。
可接受的答案是正确的,但我宁愿避免使用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,
)
这就是我对“明确胜于隐含”的看法。
d2dt = lambda date: datetime(year=date.year, month=date.month, day=date.day)
此答案的在线功能。
datetime
注意时区。在这种情况下,您可以import pytz
然后添加tzinfo=pytz.timezone('Europe/London')
。
您可以使用date.timetuple()
method和unpack运算符*
。
args = d.timetuple()[:6]
datetime.datetime(*args)
datetime.combine
通过@kiamlaluno的答案发现之前,我曾经使用过它。我认为这是相当Python的语言,尤其是考虑到构造一个datetime.time
对象datetime.time(*map(int,"H:M:S".split(":")))
无论如何都看起来很像……
今天是2016年,我认为pandas Timestamp提供了最干净的解决方案:
from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)
时间戳等于日期时间的大熊猫,并且在大多数情况下可以互换。校验:
from datetime import datetime
isinstance(pd.Timestamp(d), datetime)
但是,如果您真的想要一个普通的日期时间,您仍然可以执行以下操作:
pd.Timestamp(d).to_datetime()
时间戳比日期时间强大得多,尤其是在处理时区时。实际上,时间戳记是如此强大,以至于它们的文献记录如此之少,实在令人遗憾。
尚未提到的将日期转换为日期时间的一种方法:
from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
您可以使用 easy_date使其变得容易:
import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
我是Python的新手。但是这段代码对我有用,它将我提供的指定输入转换为datetime。这是代码。如我错了请纠正我。
import sys
from datetime import datetime
from time import mktime, strptime
user_date = '02/15/1989'
if user_date is not None:
user_date = datetime.strptime(user_date,"%m/%d/%Y")
else:
user_date = datetime.now()
print user_date
datetime.date()
对象,而不是string。
.datetime()
方法;愚蠢的是他们没有这种方法。