Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rounding up to nearest 30 minutes in python

Tags:

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

like image 377
user875139 Avatar asked Sep 22 '15 17:09

user875139


People also ask

How do you round to the nearest 5 in Python?

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.


1 Answers

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).

Output

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())) 
like image 133
jfs Avatar answered Nov 02 '22 21:11

jfs