How to add delta to python datetime.time?

后端 未结 5 1964
别那么骄傲
别那么骄傲 2020-11-27 06:46

From:

http://docs.python.org/py3k/library/datetime.html#timedelta-objects

A timedelta object represents a duration, the difference between two

相关标签:
5条回答
  • 2020-11-27 06:56

    A datetime.time object can be split into separate integer components that you can add to. No need for timedelta eg:

    from datetime import datetime, time
        time_now = datetime.now().time()
        twelve_hours_time =  time(time_now.hour + 12, time_now.minute)
    
    0 讨论(0)
  • 2020-11-27 07:00

    datetime.time objects do not support addition with datetime.timedeltas.

    There is one natural definition though, clock arithmetic. You could compute it like this:

    import datetime as dt
    now = dt.datetime.now()
    delta = dt.timedelta(hours = 12)
    t = now.time()
    print(t)
    # 12:39:11.039864
    
    print((dt.datetime.combine(dt.date(1,1,1),t) + delta).time())
    # 00:39:11.039864
    

    dt.datetime.combine(...) lifts the datetime.time t to a datetime.datetime object, the delta is then added, and the result is dropped back down to a datetime.time object.

    0 讨论(0)
  • 2020-11-27 07:06

    Here is a function that adds a time to a timedelta:

    def time_plus(time, timedelta):
        start = datetime.datetime(
            2000, 1, 1,
            hour=time.hour, minute=time.minute, second=time.second)
        end = start + timedelta
        return end.time()
    

    This will provide the expected result so long as you don't add times in a way that crosses a midnight boundary.

    0 讨论(0)
  • 2020-11-27 07:15

    How would this work? datetime.datetime.now().time() returns only hours, minutes, seconds and so on, there is no date information what .time() returns, only time.

    Then, what should 18:00:00 + 8 hours return?
    There's not answer to that question, and that's why you can't add a time and a timedelta.

    In other words:

    18:28:44, Sep. 16, 2012 + 8 hours #makes sense: it's 2:28:44, Sep. 17, 2012
    18:28:44 + 5 hours # Doesn't make sense.
    
    0 讨论(0)
  • 2020-11-27 07:17

    All the solutions above are too complicated, OP had already shown that we can do calculation between datetime.datetime and datetime.timedelta, so why not just do:

    (datetime.now() + timedelta(hours=12)).time()

    0 讨论(0)
提交回复
热议问题