Rounding up to nearest 30 minutes in python
Question: 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


Answer: 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)](http://stackoverflow.com/questions/13071384/python-ceil-a-datetime-
to-next-quarter-of-an-hour/32657466#comment53190737_32657466).

### 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()))
    

