2

「HH:MM」のような文字列形式の時間データを取得しています。たとえば、「13:33」は13時間33分になります。

だから、私はこのコードを使って時間オブジェクトを取得しました、そしてそれはうまくいきます

datetime.datetime.strptime('13:33', '%H:%M').time()

しかし、私は今、新しい問題を抱えています.24時間以上を表す新しい文字列が入り始め、datetime.datetime.strptime('25:33', '%H:%M').time()単に失敗します。あなたの提案は何ですか?

4

3 に答える 3

1

datetime.timeオブジェクトは、特定の日とは関係なく、 (ローカルの)時刻を表します。

見た目のように、経過時間を表すために使用しないでください。

より適切な可能性がありますdatetime.timedelta:

timedeltaオブジェクトは、2 つの日付または時刻の差である期間を表します。

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

すべての引数はオプションで、デフォルトは 0 です。引数は int、long、または float で、正または負の値です。

例:

>>> from datetime import timedelta
>>> d = timedelta(hours=25,minutes=10)
>>> d
datetime.timedelta(1, 4200) #Days, seconds
于 2013-01-15T01:39:30.040 に答える
0

「単に失敗する」と言うときは、いつ失敗するのか知りたいと思います。これが1つのアプローチです:

>>> import datetime
>>>
>>> time_strs = [
... "13:33",
... "25:33",
... "12:88"
... ]
>>>
>>> for s in time_strs:
...     try:
...         print datetime.datetime.strptime(s, '%H:%M').time()
...     except ValueError:
...         print "Bad time: {0}".format(s)
...
13:33:00
Bad time: 25:33
Bad time: 12:88
于 2013-01-15T01:25:05.020 に答える
0

残念ながら、これは手動で行う必要があります。

def parse_stopwatch(s):
    hours, minutes = s.split(':', 1)
    return datetime.time(hour=int(hours), minute=int(minutes))

これは本当にばかげています、当然です。自動的に60分以上を時間に変換したり、正規表現ですべてを凝らしたり、数日または数秒のサポートを追加したりできます。ただし、このデータがどこから来ているのか、そしてそれが何を表すのかについて、もう少し具体的にする必要があります。:)

于 2013-01-15T01:33:42.243 に答える