Silly question, but is there a built-in method for converting a date to a datetime in Python, ie. getting the datetime for the midnight of the date? The opposite conversion is easy - datetime has a .date() method. Do I really have to manually call datetime(d.year, d.month, d.day) ?
问题:
回答1:
You can use datetime.combine(date, time); for the time, you create a datetime.time object initialized to midnight.
from datetime import date from datetime import datetime d = date.today() datetime.combine(d, datetime.min.time()) 回答2:
There are several ways, although I do believe the one you mention (and dislike) is the most readable one.
>>> 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) and so forth -- but basically they all hinge on appropriately extracting info from the date object and ploughing it back into the suitable ctor or classfunction for datetime.
回答3:
The accepted answer is correct, but I would prefer to avoid using datetime.min.time() because it's not obvious to me exactly what it does. If it's obvious to you, then more power to you. I also feel the same way about the timetuple method and the reliance on the ordering.
In my opinion, the most readable, explicit way of doing this without relying on the reader to be very familiar with the datetime module API is:
from datetime import date, datetime today = date.today() today_with_time = datetime( year=today.year, month=today.month, day=today.day, ) That's my take on "explicit is better than implicit."
回答4:
You can use the timetuple() method and varargs.
datetime.datetime(*(d.timetuple()[:6])) 回答5:
Today being 2016, I think the cleanest solution is provided by pandas Timestamp:
from datetime import date import pandas as pd d = date.today() pd.Timestamp(d) Timestamp is the pandas equivalent of datetime and is interchangable with it in most cases. Check:
from datetime import datetime isinstance(pd.Timestamp(d), datetime) But in case you really want a vanilla datetime, you can still do:
pd.Timestamp(d).to_datetime() Timestamps are a lot more powerful than datetimes, amongst others when dealing with timezones. Actually, Timestamps are so powerful that it's a pity they are so poorly documented...
回答6:
You can use easy_date to make it easy:
import date_converter my_datetime = date_converter.date_to_datetime(my_date) 回答7:
One way to convert from date to datetime that hasn't been mentioned yet:
from datetime import date, datetime d = date.today() datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d') 回答8:
Using pandas to convert a series of dates to python datetimes:
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)] One may first need to convert the dates:
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() 回答9:
If you need something quick, datetime_object.date() gives you a date of a datetime object.
回答10:
I am a newbie to Python. But this code worked for me which converts the specified input I provide to datetime. Here's the code. Correct me if I'm wrong.
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