68

たとえば、次の形式で指定された時間値の文字列を秒に変換する必要があります。

1.'00:00:00,000' -> 0 seconds

2.'00:00:10,000' -> 10 seconds

3.'00:01:04,000' -> 64 seconds

4.'01:01:09,000' -> 3669 seconds

これを行うには正規表現を使用する必要がありますか? time モジュールを使ってみましたが、

time.strptime('00:00:00,000','%I:%M:%S')

スロー:

ValueError: time data '00:00:00,000' does not match format '%I:%M:%S'

編集

次のようになります。

from datetime import datetime
pt = datetime.strptime(timestring,'%H:%M:%S,%f')
total_seconds = pt.second + pt.minute*60 + pt.hour*3600

正しい結果が得られます。間違ったモジュールを使用していました。

4

13 に答える 13

73
>>> import datetime
>>> import time
>>> x = time.strptime('00:01:00,000'.split(',')[0],'%H:%M:%S')
>>> datetime.timedelta(hours=x.tm_hour,minutes=x.tm_min,seconds=x.tm_sec).total_seconds()
60.0
于 2012-05-19T09:07:29.187 に答える
43

私が思うもう少しpythonicな方法は次のとおりです。

timestr = '00:04:23'

ftr = [3600,60,1]

sum([a*b for a,b in zip(ftr, map(int,timestr.split(':')))])

出力は 263 秒です。

誰かがそれをさらに単純化できるかどうかを知りたいです。

于 2012-10-05T04:34:55.920 に答える
30

輸入なし

time = "01:34:11"
sum(x * int(t) for x, t in zip([3600, 60, 1], time.split(":"))) 
于 2016-12-20T22:56:31.790 に答える
11

を取得するにはtimedelta()、 を減算する必要があります1900-01-01

>>> from datetime import datetime
>>> datetime.strptime('01:01:09,000', '%H:%M:%S,%f')
datetime.datetime(1900, 1, 1, 1, 1, 9)
>>> td = datetime.strptime('01:01:09,000', '%H:%M:%S,%f') - datetime(1900,1,1)
>>> td
datetime.timedelta(0, 3669)
>>> td.total_seconds() # 2.7+
3669.0

%H上記は、1 日以上の時差をサポートするために、入力が 1 日未満であることを意味します。

>>> import re
>>> from datetime import timedelta
>>> td = timedelta(**dict(zip("hours minutes seconds milliseconds".split(),
...                           map(int, re.findall('\d+', '31:01:09,000')))))
>>> td
datetime.timedelta(1, 25269)
>>> td.total_seconds()
111669.0

.total_seconds()Python 2.6 でエミュレートするには:

>>> from __future__ import division
>>> ((td.days * 86400 + td.seconds) * 10**6 + td.microseconds) / 10**6
111669.0
于 2015-09-12T12:00:03.447 に答える
6

秒の端数を取り除いても構わないと思っているようです...問題は、時間として「00」を使用できないことです%I

>>> time.strptime('00:00:00,000'.split(',')[0],'%H:%M:%S')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>>
于 2012-05-19T08:50:01.397 に答える
5

手動での解析は常にあります

>>> import re
>>> ts = ['00:00:00,000', '00:00:10,000', '00:01:04,000', '01:01:09,000']
>>> for t in ts:
...     times = map(int, re.split(r"[:,]", t))
...     print t, times[0]*3600+times[1]*60+times[2]+times[3]/1000.
... 
00:00:00,000 0.0
00:00:10,000 10.0
00:01:04,000 64.0
01:01:09,000 3669.0
>>> 
于 2012-05-19T08:54:02.847 に答える
2

sverrir-sigmundarson のコメントに触発されました:

def time_to_sec(time_str):
    return sum(x * int(t) for x, t in zip([1, 60, 3600], reversed(time_str.split(":"))))
于 2019-05-06T10:13:24.503 に答える