1

次のような文字列があります"0:07:38.701"。これは、0 時間 7 分 38 秒 701 ミリ秒を意味します。

次にdatetime、次のようなオブジェクトがあります。datetime.datetime(1945, 1, 3, 11, 45, 0, 44000)

これらの時間を追加して (最初の時間はデルタ、2 番目は絶対時間参照)、新しいdatetime.datetimeオブジェクトを取得したいと思います。

これどうやってするの?

4

4 に答える 4

4

datetimeaと aを取得したら、それらを追加するのは演算子timedeltaを使用するのと同じくらい簡単です。+

>>> dt = datetime.datetime(1945, 1, 3, 11, 45, 0, 44000)
>>> td = datetime.timedelta(hours=0, minutes=7, seconds=38.701)
>>> dt + td
datetime.datetime(1945, 1, 3, 11, 52, 38, 745000)

timedeltaオブジェクト用に似たstrptime、オブジェクト用の組み込みパーサーはありませんdatetime

datetime実際に文字列を として解析し、フィールドを抽出して を構築することで偽造することもできますがtimedelta、これはハックで複雑です。単純な形式の場合は、簡単に書くことができます。

def strpdelta(s):
    hr, min, sec = map(float, s.split(':'))
    return datetime.timedelta(hours=hr, minutes=min, seconds=sec)
于 2013-10-07T21:13:16.370 に答える
1

タイム デルタを使用できます。

>>> import datetime, re
>>> s = "0:07:38.701"
>>> hours, minutes, seconds = [float(val) for val in s.split(':')]
>>> delta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
>>> datetime.datetime(1945, 1, 3, 11, 45, 0, 44000) + delta
datetime.datetime(1945, 1, 3, 11, 52, 38, 745000)
于 2013-10-07T21:09:00.903 に答える
1

編集:コメントで指摘されているように、timedelta は float 値を処理できます。すなわちseconds=38.701、それはに変換されsecondsますmilliseconds

from datetime import timedelta, datetime

dtime = datetime(1945, 1, 3, 11, 45, 0, 44000)
str = "0:07:38.701"

elems = str.split(':')
hr, min, sec= int(elems[0]), int(elems[1]), float(elems[2])

tdelta = timedelta(hours=hr, minutes=min, seconds=sec)

new_datetime = dtime + tdelta

編集前のバージョン:

from datetime import timedelta, datetime

dtime = datetime(1945, 1, 3, 11, 45, 0, 44000)
str = "0:07:38.701"

stuff = str.split(':')
elems = stuff[:-1] + stuff[2].split('.')
hr, min, sec, mls= int(elems[0]), int(elems[1]), int(elems[2], int(elems[3]))

tdelta = timedelta(hours=hr, minutes=min, seconds=sec, milliseconds=mls)

new_datetime = dtime + tdelta
于 2013-10-07T21:15:21.727 に答える