How to truncate the time on a datetime object? How to truncate the time on a datetime object? python python

How to truncate the time on a datetime object?


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

>>> import datetime>>> dt = datetime.datetime.now()>>> dt = dt.replace(hour=0, minute=0, second=0, microsecond=0) # Returns a copy>>> dtdatetime.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 = datetime.date(dt.year, dt.month, dt.day)>>> d_truncateddatetime.date(2011, 3, 29)


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

>>> now = datetime.now()>>> now.date()datetime.date(2011, 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)


Four years later: another way, avoiding replace

I know the accepted answer from four years ago works, but this seems a tad lighter than using replace:

dt = datetime.date.today()dt = datetime.datetime(dt.year, dt.month, dt.day)

Notes

  • When you create a datetime object without passing time properties to the constructor, you get midnight.
  • As others have noted, this assumes you want a datetime object for later use with timedeltas.
  • You can, of course, substitute this for the first line: dt = datetime.datetime.now()