Stack Overflow Asked by AskNature on December 27, 2021
from datetime import datetime
roughtime = datetime(2018,1,1,5,2,1)
I want to floor roughtime
as datetime.datetime(2018, 1, 1, 0, 0, 0)
and also ceil roughtime
as datetime.datetime(2018, 1, 2, 0, 0, 0)
.
Is there any convenient way to realize this? I know I can convert roughtime
using matplotlib.dates.date2num. But I wonder if there are other ingenious ideas
You can use the datetime.combine(date, time)
to create new datetime object using given datetime.date
and datetime.time
.
from datetime import datetime
floored = datetime.combine(roughtime.date(), datetime.min.time())
from datetime import datetime, timedelta
if roughtime.time() == datetime.min.time():
ceiled = roughtime
else:
ceiled = datetime.combine(roughtime.date()+timedelta(days=1), datetime.min.time())
if..else
statement since if you would ceil 2020-07-24 00:00:00
one would not expect to get 2020-07-25 00:00:00
ceiled = roughtime
is okay (no need to make a copy), since datetime
objects are immutable. (source)Answered by np8 on December 27, 2021
You can use replace
function to replace the time part to make it floor
and add one day to make it ceil
In [1]: import datetime
In [2]: def ceil(datetimeObj):
...: return floor(datetimeObj) + datetime.timedelta(days=1)
...:
In [3]: def floor(datetimeObj):
...: return datetimeObj.replace(second=0, hour=0, minute=0)
...:
In [4]: roughtime = datetime.datetime(2018,1,1,5,2,1)
In [5]: ceil(roughtime)
Out[5]: datetime.datetime(2018, 1, 2, 0, 0)
In [6]: floor(roughtime)
Out[6]: datetime.datetime(2018, 1, 1, 0, 0)
Answered by bigbounty on December 27, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP