愚蠢的问题,但有一个内置的方法,用于在Python中将 date 转换为 datetime ,即 . 在 date 的午夜得到 datetime ?相反的转换很容易 - datetime 有一个 .date() 方法 . 我真的要手动拨打 datetime(d.year, d.month, d.day) 吗?
date
datetime
.date()
datetime(d.year, d.month, d.day)
你可以使用datetime.combine(日期,时间);当时,您创建一个初始化为午夜的 datetime.time 对象 .
datetime.time
from datetime import date from datetime import datetime d = date.today() datetime.combine(d, 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 对象中适当地提取信息并将其转换回合适的ctor或类功能 datetime .
接受的答案是正确的,但我宁愿避免使用 datetime.min.time() ,因为它对您来说很明显,那么对您来说更有力量 . 我对 timetuple 方法以及对订购的依赖也有同感 .
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, )
这是我对“明确比隐含更好”的看法 .
您可以使用 date.timetuple() 方法并解压缩运算符 * .
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()
时间戳比日期时更强大,尤其是在处理时区时 . 实际上,时间戳是如此强大,以至于它们的记录如此糟糕......
将日期转换为日期时间的一种方法尚未提及:
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)
使用pandas将一系列日期转换为python日期时间:
dates = pd.DataFrame( {'date': pd.DatetimeIndex(start='2017-01-01', end='2017-01-5', freq='D')}) >>> dates date 0 2017-01-01 1 2017-01-02 2 2017-01-03 3 2017-01-04 4 2017-01-05 >>> pd.DatetimeIndex(dates['date']).to_pydatetime().tolist() [datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 1, 2, 0, 0), datetime.datetime(2017, 1, 3, 0, 0), datetime.datetime(2017, 1, 4, 0, 0), datetime.datetime(2017, 1, 5, 0, 0)]
可能首先需要转换日期:
dates = pd.DataFrame( {'date': ['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05']}) dates['date'] = pd.DatetimeIndex(dates['date']) pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()
如果您需要快速的东西, datetime_object.date() 会为您提供日期时间对象的日期 .
datetime_object.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
10 回答
你可以使用datetime.combine(日期,时间);当时,您创建一个初始化为午夜的
datetime.time
对象 .有几种方法,虽然我确实相信你提到的(并且不喜欢)是最可读的方式 .
等等 - 但基本上它们都依赖于从
date
对象中适当地提取信息并将其转换回合适的ctor或类功能datetime
.接受的答案是正确的,但我宁愿避免使用
datetime.min.time()
,因为它对您来说很明显,那么对您来说更有力量 . 我对timetuple
方法以及对订购的依赖也有同感 .在我看来,最可读,最明确的方式,而不依赖于读者非常熟悉
datetime
模块API是:这是我对“明确比隐含更好”的看法 .
您可以使用
date.timetuple()
方法并解压缩运算符*
.今天是2016年,我认为最干净的解决方案是由熊猫时间戳提供的:
时间戳是与datetime等效的熊猫,并且在大多数情况下可以与它互换 . 校验:
但如果你真的想要一个香草日期时间,你仍然可以:
时间戳比日期时更强大,尤其是在处理时区时 . 实际上,时间戳是如此强大,以至于它们的记录如此糟糕......
将日期转换为日期时间的一种方法尚未提及:
您可以使用easy_date轻松实现:
使用pandas将一系列日期转换为python日期时间:
可能首先需要转换日期:
如果您需要快速的东西,
datetime_object.date()
会为您提供日期时间对象的日期 .我是Python的新手 . 但是这段代码对我有用,它将我提供的指定输入转换为datetime . 这是代码 . 如我错了请纠正我 .