How to convert an H:MM:SS time string to seconds in Python?

前端 未结 12 1750
陌清茗
陌清茗 2020-11-29 22:14

Basically I have the inverse of this problem: Python Time Seconds to h:m:s

I have a string in the format H:MM:SS (always 2 digits for minutes and seconds), and I nee

相关标签:
12条回答
  • 2020-11-29 22:41
    def get_sec(time_str):
        """Get Seconds from time."""
        h, m, s = time_str.split(':')
        return int(h) * 3600 + int(m) * 60 + int(s)
    
    
    print(get_sec('1:23:45'))
    print(get_sec('0:04:15'))
    print(get_sec('0:00:25'))
    
    0 讨论(0)
  • 2020-11-29 22:44

    Using datetime module is also posible and more robust

    import datetime as dt
    
    def get_total_seconds(stringHMS):
       timedeltaObj = dt.datetime.strptime(stringHMS, "%H:%M:%S") - dt.datetime(1900,1,1)
       return timedeltaObj.total_seconds()
    

    datetime.strptime parses the string according to format %H:%M:%S, and it creates a datetime object as year 1900, month1, day 1, hour H, minute M, and second S.

    That's why to get the total of seconds is necessary to subtract the year, month and day.

    print(get_total_seconds('1:23:45'))
    >>> 5025.0
    
    print(get_total_seconds('0:04:15'))
    >>> 255.0
    
    print(get_total_seconds('0:00:25'))
    >>>25.0
    
    0 讨论(0)
  • 2020-11-29 22:45

    Without many checks, and assuming it's either "SS" or "MM:SS" or "HH:MM:SS" (although not necessarily two digits per part):

    def to_seconds(timestr):
        seconds= 0
        for part in timestr.split(':'):
            seconds= seconds*60 + int(part)
        return seconds
    

    This is a different “spelling” of FMc's answer :)

    0 讨论(0)
  • 2020-11-29 22:45

    You can split the time into a list and add each individual time component, multiplying the hours component by 3600 (the number of seconds in an hour) and the minutes component by 60 (number of seconds in a minute), like:

    timeInterval ='00:35:01'
    list = timeInterval.split(':')
    hours = list[0]
    minutes = list[1]
    seconds = list[2]
    total = (int(hours) * 3600 + int(minutes) * 60 + int(seconds))
    print("total = ", total)
    
    0 讨论(0)
  • 2020-11-29 22:47

    Just a simple generalization to the great response of taskinoor

    In the context of my problem the format is similar, but includes AM or PM.

    Format 'HH:MM:SS AM' or 'HH:MM:SS PM'

    For this case the function changes to:

    def get_sec(time_str):
    """Get Seconds from time."""
    if 'AM' in time_str:
        time_str = time_str.strip('AM')
        h, m, s = time_str.split(':')
        seconds = int(h) * 3600 + int(m) * 60 + int(s)
    if 'PM' in time_str:
        time_str = time_str.strip('PM')
        h, m, s = time_str.split(':')
        seconds = (12 + int(h)) * 3600 + int(m) * 60 + int(s)
    
    return seconds 
    
    0 讨论(0)
  • 2020-11-29 22:52

    You can use lambda and reduce a list and the fact that m=60s and h=60m. (see "Reducing a List" at http://www.python-course.eu/lambda.php)

    timestamp = "1:23:45"
    seconds = reduce(lambda x, y: x*60+y, [int(i) for i in (timestamp.replace(':',',')).split(',')])
    
    0 讨论(0)
提交回复
热议问题