How to truncate the time on a DateTime object in Python?


What is a classy way to way truncate a python datetime object?

In this particular case, to the day. So basically setting hour, minute, seconds, and microseconds to 0.

I would like the output to also be a datetime object, not a string.

1/17/2018 1:09:55 PM

Accepted Answer

I think this is what you're looking for...

>>> import datetime
>>> dt =
>>> dt = dt.replace(hour=0, minute=0, second=0, microsecond=0) # Returns a copy
>>> dt
datetime.datetime(2011, 3, 29, 0, 0)

But if you really don't care about the time aspect of things, then you should really only be passing around date objects...

>>> d_truncated =, dt.month,
>>> d_truncated, 3, 29)
3/27/2019 7:58:33 PM

Use a date not a datetime if you dont care about the time.

>>> now =
>>>, 3, 29)

You can update a datetime like this:

>>> now.replace(minute=0, hour=0, second=0, microsecond=0)
datetime.datetime(2011, 3, 29, 0, 0)

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow