将 timedelta 对象转换为 datetime 对象的正确方法是什么?
我立即想到了类似的东西datetime(0)+deltaObj
,但这不是很好......没有toDateTime()
功能或类似的东西吗?
将 timedelta 转换为 datetime 是没有意义的,但是选择一个初始或开始 datetime 并从中添加或减去 timedelta 确实有意义。
>>> 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)
由于 datetime 表示一天内的时间,因此您的 timedelta 应小于 24 小时(86400 秒),即使 timedelta 不受此约束。
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
如果您不想要默认日期并知道 timedelta 的日期:
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
我发现我可以使用 .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)
)
以转换一列的示例改进@sadpanduar答案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)