次のような文字列があります"0:07:38.701"
。これは、0 時間 7 分 38 秒 701 ミリ秒を意味します。
次にdatetime
、次のようなオブジェクトがあります。datetime.datetime(1945, 1, 3, 11, 45, 0, 44000)
これらの時間を追加して (最初の時間はデルタ、2 番目は絶対時間参照)、新しいdatetime.datetime
オブジェクトを取得したいと思います。
これどうやってするの?
datetime
aと 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)
タイム デルタを使用できます。
>>> 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)
編集:コメントで指摘されているように、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