4

私の状況では、時間形式が常に hh:mm:ss であるとは限らず、mm:ss の場合もありますが、同じことを望むいくつかの質問を見てきました。

ここで言及されているアイデアを理解していますPythonでH:MM:SS時間文字列を秒に変換する方法は? そしてここでPython 時間変換 h:m:s から秒へ

私が理解していないのは、hh:mm:ss、h:mm:ss、mm:ss、または単に m:ss のような状況に対処する方法です。

def getSec(s):
    l = s.split(':')
    return int(l[0]) * 3600 + int(l[1]) * 60 + int(l[2])

編集:私の質問は十分に明確ではないと思います。1 つの関数ですべての可能な形式を処理するソリューションを探しています。

4

3 に答える 3

10
def getSec(s):
    l = map(int, s.split(':')) # l = list(map(int, s.split(':'))) in Python 3.x
    return sum(n * sec for n, sec in zip(l[::-1], (1, 60, 3600)))

getSec('20') # 20
getSec('1:20') # 80
getSec('1:30:01') # 5401
于 2013-06-22T07:26:45.050 に答える
3

すべての時間形式でほぼ同じです。datetimeモジュールを確認してください。

>>> s = "15:34:23"
>>> datetime.datetime.strptime(s, "%H:%M:%S")
datetime.datetime(1900, 1, 1, 15, 34, 23)

>>> s = "34:23"  
>>> datetime.datetime.strptime(s, "%M:%S")
datetime.datetime(1900, 1, 1, 0, 34, 23)

>>> s = "4:34"
>>> datetime.datetime.strptime(s, "%M:%S")
datetime.datetime(1900, 1, 1, 0, 4, 34)

%Hは時間、%Mは分、%Sは秒です。一覧はこちら


関数として:

>>> def getSec(s):
...     L = s.split(':')
...     if len(L) == 1:
...             return L[0]
...     elif len(L) == 2:
...             datee = datetime.datetime.strptime(s, "%M:%S")
...             return datee.minute * 60 + datee.second
...     elif len(L) == 3:
...             datee = datetime.datetime.strptime(s, "%H:%M:%S")
...             return datee.hour * 3600 + datee.minute * 60 + datee.second
...
>>> getSec("13:25:43")
48343
>>> getSec("25:43")
1543
>>> getSec("43")
43
于 2013-06-22T07:14:36.777 に答える