1055

How do I convert a datetime.datetime object (e.g., the return value of datetime.datetime.now()) to a datetime.date object in Python?

2
  • 42
    If you just need this for datetime.datetime.now(), please note that there is a method datetime.date.today(). Commented May 6, 2016 at 1:04
  • 1
    if you have already imported datetime e.g. from datetime import datetime you can just add date from datetime import datetime, date Commented Feb 18, 2019 at 13:06

10 Answers 10

1607

Use the date() method:

datetime.datetime.now().date() 
Sign up to request clarification or add additional context in comments.

4 Comments

To get in UTC which can be very helpful --> datetime.datetime.utcnow() and correspondingly datetime.datetime.utcnow().date()
Thanks @SeanColombo, current date in a particular timezone should be datetime.datetime.now(pytz.timezone('US/Pacific')).date()
datetime.datetime.utcnow() is deprecated see docs.python.org/3/library/datetime.html#datetime.datetime replace with datetime.now(timezone.utc). The OP is actually after date so this is moot.
Given from datetime import datetime, date, timezone and one using a timezone with a non-zero offset, then datetime.now(timezone.utc).date() can be different from datetime.now().date() (the latter being also available as date.today()).
173

From the documentation:

datetime.datetime.date()

Return date object with same year, month and day.

Comments

80

You use the datetime.datetime.date() method:

datetime.datetime.now().date() 

Obviously, the expression above can (and should IMHO :) be written as:

datetime.date.today() 

4 Comments

to be fair, this answer (using .today()) is the most pythonic for the stated example question.
If you use today, be careful when comparing a date. today() has an hour component too. so if you do: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')and then if losdat < datetime.datetime.today(): it will always be true because losdatwill have a time component of midnight which will fall before the timestamp of today()
@DennisDecoene: why use datetime.datetime.today() instead of datetime.date.today(), when one wants a datetime.date object?
@tzot Yes that was also what I wanted to point out but was unclear about.
66

You can convert a datetime object to a date with the date() method of the date time object, as follows:

<datetime_object>.date() 

Comments

14

Answer updated to Python 3.7 and more

Here is how you can turn a date-and-time object

(aka datetime.datetime object, the one that is stored inside models.DateTimeField django model field)

into a date object (aka datetime.date object):

from datetime import datetime #your date-and-time object # let's supposed it is defined as datetime_element = datetime(2020, 7, 10, 12, 56, 54, 324893) # where # datetime_element = datetime(year, month, day, hour, minute, second, milliseconds) # WHAT YOU WANT: your date-only object date_element = datetime_element.date() 

And just to be clear, if you print those elements, here is the output :

print(datetime_element) 

2020-07-10 12:56:54.324893


print(date_element) 

2020-07-10

Comments

12

you could enter this code form for (today date & Names of the Day & hour) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

'19-09-09 Mon 17:37:56'

and enter this code for (today date simply): datetime.date.today().strftime('%y-%m-%d') '19-09-10'

for object : datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()

1 Comment

OP wanted to get datetime.date object, and not string, which strftime would return (ref: docs.python.org/3/library/datetime.html#datetime.date.strftime).
6
import time import datetime # use mktime to step by one day # end - the last day, numdays - count of days to step back def gen_dates_list(end, numdays): start = end - datetime.timedelta(days=numdays+1) end = int(time.mktime(end.timetuple())) start = int(time.mktime(start.timetuple())) # 86400 s = 1 day return xrange(start, end, 86400) # if you need reverse the list of dates for dt in reversed(gen_dates_list(datetime.datetime.today(), 100)): print datetime.datetime.fromtimestamp(dt).date() 

1 Comment

Did you mean to post this answer here? It looks to me like you're answer is directed towards a different question.
2

I use data.strftime('%y-%m-%d') with lambda to transfer column to date

Comments

-1
Solved: AttributeError: 'Series' object has no attribute 'date' 

You can use as below,

df["date"] = pd.to_datetime(df["date"]).dt.date 

where in above code date contains both date and time (2020-09-21 22:32:00), using above code we can get only date as (2020-09-21)

1 Comment

Pandas answer. Not relevant.
-4

If you are using pandas then this can solve your problem:

Lets say that you have a variable called start_time of type datetime64 in your dataframe then you can get the date part like this:

df.start_time.dt.date 

3 Comments

I don't think the question was about pandas.
You are right, I had pandas on my mind when I was working on this problem.
Wouldn't it make sance to either delete this post or clarify that. It is missleading like this.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.