How to calculate the time interval between two time strings

前端 未结 12 2423
生来不讨喜
生来不讨喜 2020-11-22 12:03

I have two times, a start and a stop time, in the format of 10:33:26 (HH:MM:SS). I need the difference between the two times. I\'ve been looking through documentation for

相关标签:
12条回答
  • 2020-11-22 12:37

    Try this

    import datetime
    import time
    start_time = datetime.datetime.now().time().strftime('%H:%M:%S')
    time.sleep(5)
    end_time = datetime.datetime.now().time().strftime('%H:%M:%S')
    total_time=(datetime.datetime.strptime(end_time,'%H:%M:%S') - datetime.datetime.strptime(start_time,'%H:%M:%S'))
    print total_time
    

    OUTPUT :

    0:00:05
    
    0 讨论(0)
  • 2020-11-22 12:42
    import datetime as dt
    from dateutil.relativedelta import relativedelta
    
    start = "09:35:23"
    end = "10:23:00"
    start_dt = dt.datetime.strptime(start, "%H:%M:%S")
    end_dt = dt.datetime.strptime(end, "%H:%M:%S")
    timedelta_obj = relativedelta(start_dt, end_dt)
    print(
        timedelta_obj.years,
        timedelta_obj.months,
        timedelta_obj.days,
        timedelta_obj.hours,
        timedelta_obj.minutes,
        timedelta_obj.seconds,
    )
    

    result: 0 0 0 0 -47 -37

    0 讨论(0)
  • 2020-11-22 12:48

    Both time and datetime have a date component.

    Normally if you are just dealing with the time part you'd supply a default date. If you are just interested in the difference and know that both times are on the same day then construct a datetime for each with the day set to today and subtract the start from the stop time to get the interval (timedelta).

    0 讨论(0)
  • 2020-11-22 12:49

    Here's a solution that supports finding the difference even if the end time is less than the start time (over midnight interval) such as 23:55:00-00:25:00 (a half an hour duration):

    #!/usr/bin/env python
    from datetime import datetime, time as datetime_time, timedelta
    
    def time_diff(start, end):
        if isinstance(start, datetime_time): # convert to datetime
            assert isinstance(end, datetime_time)
            start, end = [datetime.combine(datetime.min, t) for t in [start, end]]
        if start <= end: # e.g., 10:33:26-11:15:49
            return end - start
        else: # end < start e.g., 23:55:00-00:25:00
            end += timedelta(1) # +day
            assert end > start
            return end - start
    
    for time_range in ['10:33:26-11:15:49', '23:55:00-00:25:00']:
        s, e = [datetime.strptime(t, '%H:%M:%S') for t in time_range.split('-')]
        print(time_diff(s, e))
        assert time_diff(s, e) == time_diff(s.time(), e.time())
    

    Output

    0:42:23
    0:30:00
    

    time_diff() returns a timedelta object that you can pass (as a part of the sequence) to a mean() function directly e.g.:

    #!/usr/bin/env python
    from datetime import timedelta
    
    def mean(data, start=timedelta(0)):
        """Find arithmetic average."""
        return sum(data, start) / len(data)
    
    data = [timedelta(minutes=42, seconds=23), # 0:42:23
            timedelta(minutes=30)] # 0:30:00
    print(repr(mean(data)))
    # -> datetime.timedelta(0, 2171, 500000) # days, seconds, microseconds
    

    The mean() result is also timedelta() object that you can convert to seconds (td.total_seconds() method (since Python 2.7)), hours (td / timedelta(hours=1) (Python 3)), etc.

    0 讨论(0)
  • 2020-11-22 12:50

    I like how this guy does it — https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps. Not sure if it has some cons.

    But looks neat for me :)

    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    
    t_a = datetime.now()
    t_b = datetime.now()
    
    def diff(t_a, t_b):
        t_diff = relativedelta(t_b, t_a)  # later/end time comes first!
        return '{h}h {m}m {s}s'.format(h=t_diff.hours, m=t_diff.minutes, s=t_diff.seconds)
    

    Regarding to the question you still need to use datetime.strptime() as others said earlier.

    0 讨论(0)
  • 2020-11-22 12:51

    This site says to try:

    import datetime as dt
    start="09:35:23"
    end="10:23:00"
    start_dt = dt.datetime.strptime(start, '%H:%M:%S')
    end_dt = dt.datetime.strptime(end, '%H:%M:%S')
    diff = (end_dt - start_dt) 
    diff.seconds/60 
    

    This forum uses time.mktime()

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