如何将 timedelta 对象转换为 datetime 对象

问题描述 投票:0回答:6

将 timedelta 对象转换为 datetime 对象的正确方法是什么?

我立即想到类似

datetime(0)+deltaObj
之类的东西,但这不太好......不是有一个
toDateTime()
功能或类似的东西吗?

python datetime timedelta
6个回答
49
投票

将时间增量转换为日期时间没有意义,但选择初始或开始日期时间并从中添加或减去时间增量确实有意义。

>>> 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)

2
投票

由于日期时间表示一天内的时间,因此您的时间增量应小于 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

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)
)

0
投票
    import datetime`enter code here
    lastDownloadedDate = datetime.date(2022,8,4)
    print('lastDownloadedDate: ', lastDownloadedDate)
    fdate = lastDownloadedDate + datetime.timedelta(days=1)
    fdate = datetime.datetime.strptime(str(fdate), "%Y-%m-%d")
    fdate = datetime.date(fdate.year, fdate.month, fdate.day)
    print('fdate: ', dt3)`

0
投票

我分担你的痛苦,兄弟

import datetime
from dateutil.relativedelta import relativedelta

# Both variables datetime
birthday = datetime.datetime(2000, 5, 24)
today = datetime.datetime.today()

# Time you've been alive in timedelta format
time_alive = today - birthday
print(time_alive)
>>> 8609 days, 18:47:53.341251

# Get only the time to concatenate later
hours = (datetime.datetime.min + time_alive).time()
print(hours)
>>> 18:47:53.341251

# Date that you've been alive
age = datetime.datetime.combine(datetime.datetime.fromordinal(time_alive.days) - relativedelta(years=1), hours)
print(age)
>>> 0023-07-27 18:47:53.341251

-1
投票

通过转换 pandas.DataFrame 中的一列示例来改进 @sadpanduar

answer

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)
© www.soinside.com 2019 - 2024. All rights reserved.