I have the following code below.
I would like to roundup TIME to the nearest 30 minutes in the hour. For example: 12:00PM or 12:30PM and so on.
EASTERN_NOW = timezone.localtime(timezone.now() + timedelta(minutes=30)) TIME = datetime.time(EASTERN_NOW.time().hour, EASTERN_NOW.time().minute).strftime( VALID_TIME_FORMATS[2])
Thanks in advance
Round a number Up to the nearest 5 in Python #Call the math. ceil() method passing it the number divided by 5 . Multiply the result by 5 . The result of the calculation is the number rounded up to the nearest five.
To round up to the nearest 30 minutes:
#!/usr/bin/env python3 from datetime import datetime, timedelta def ceil_dt(dt, delta): return dt + (datetime.min - dt) % delta now = datetime.now() print(now) print(ceil_dt(now, timedelta(minutes=30)))
The formula is suggested by @Mark Dickinson (for a different question).
2015-09-22 19:08:34.839915 2015-09-22 19:30:00
Note: if the input is timezone-aware datetime object such as EASTERN_NOW
in your case then you should call timezone.make_aware(rounded_dt.replace(tzinfo=None))
if you want to preserve the rounded local time and to attach the correct tzinfo, otherwise you may get wrong timezone info if the rounding crosses DST boundaries. Or to avoid failing for ambiguous local time, call .localize()
manually:
localize = getattr(rounded_dt.tzinfo, 'localize', None) if localize: rounded_dt = localize(rounded_dt.replace(tzinfo=None), is_dst=bool(rounded_dt.dst()))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With