34

timedeltaオブジェクトをdatetimeオブジェクトに変換する適切な方法は何ですか?

すぐにのようなものを思いつきますがdatetime(0)+deltaObj、それはあまりいいことではありません...toDateTime()関数などはありませんか?

4

4 に答える 4

44

タイムデルタを日時に変換することは意味がありませんが、最初の日時または開始日時を選択し、そこからタイムデルタを加算または減算することは理にかなっています。

>>> import datetime
>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2010, 3, 9, 18, 25, 19, 474362)
>>> today + datetime.timedelta(days=1)
datetime.datetime(2010, 3, 10, 18, 25, 19, 474362)
于 2010-03-09T23:25:01.473 に答える
2

日時は1日以内の時刻を表すため、タイムデルタはこの制約を受けませんが、タイムデルタは24時間(86400秒)未満である必要があります。

import datetime

seconds = 86399
td = datetime.timedelta(seconds=seconds)
print(td)
dt = datetime.datetime.strptime(str(td), "%H:%M:%S")
print(dt)

23:59:59
1900-01-01 23:59:59

デフォルトの日付が必要なく、タイムデルタの日付がわかっている場合:

date = "05/15/2020"
dt2 = datetime.datetime.strptime("{} {}".format(date, td), "%m/%d/%Y %H:%M:%S")
print(dt2)

2020-05-15 23:59:59
于 2020-05-20T16:21:16.267 に答える
1

.total_seconds()を取得し、それを使用して新しい時刻オブジェクト(または必要に応じて日時オブジェクト)を作成できることがわかりました。

import time
import datetime

start_dt_obj = datetime.datetime.fromtimestamp(start_timestamp)
stop_dt_obj = datetime.datetime.fromtimestamp(stop_timestamp)
delta = stop_dt_obj - start_dt_obj

delta_as_time_obj = time.gmtime(delta.total_seconds())

これにより、次のようなことができます。

print('The duration was {0}'.format(
    time.strftime('%H:%M', delta_as_time_obj)
)
于 2019-12-11T02:45:43.073 に答える
0

@sadpanduarの回答を改善し、次の1つの列を変換する例を示しますpandas.DataFrame

from datetime import timedelta
import time

def seconds_to_datetime(seconds, format='%Y-%m-%d %H:%M:%S'):
    td = timedelta(seconds=seconds)
    time_obj = time.gmtime(td.total_seconds())
    return time.strftime(format, time_obj)
df = pd.read_csv(CSV_PATH)
df['TIMESTAMP_COLUMN'] = df['TIMESTAMP_COLUMN'].apply(seconds_to_datetime)
于 2022-02-15T10:52:37.590 に答える