将日期和时间(小时x分钟x秒)转换为仅时间

时间:2018-07-05 18:18:08

标签: python python-3.x datetime

我有一个数据框,在其中我对两个不同的日期进行了区别,以获取小时和分钟的区别,例如:

 start_date = '2018-07-03 16:03:00'
 data_final = '2018-07-05 00:00:00'
 duration = data_final - start_date

我要查找的结果是 '31:57:00',即两个日期之间的总时差。但是我得到的结果是:“ 1天,7:57:00” (每24小时写为1天)。

我尝试使用以下语句将其转换为XMinutesHours格式:

print (datetime.datetime.strptime (duration, "%H:%M:%S"))

但是我得到了错误:

  

ValueError:时间数据“ 1天,7:57:00”与格式“%H:%”不匹配   M:%S'

有什么主意吗?

3 个答案:

答案 0 :(得分:2)

您需要以小时,分钟和秒为单位计算等效项, 您可以实现一个函数来获取该值,例如:

from datetime import datetime

def get_duration(duration):
    hours = int(duration / 3600)
    minutes = int(duration % 3600 / 60)
    seconds = int((duration % 3600) % 60)
    return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)

format_str = '%Y-%m-%d %H:%M:%S'
start_date_str = '2018-07-03 16:03:00'
end_date_str = '2018-07-05 00:00:00'

start_date = datetime.strptime(start_date_str, format_str)
end_date = datetime.strptime(end_date_str, format_str)
duration = (end_date - start_date).total_seconds()

print(get_duration(duration))

答案 1 :(得分:0)

您拥有的是一个datetime.timedelta对象,这是从两个datetime.datetime对象的减法中得到的。 doc已经回答了这个问题。

顺便说一句,您似乎真的想使用strptime时正在尝试使用strftimestrptime p 解析一个字符串并将其转换为datetime.datetime对象(因此 p ),而strftime f datetime.datetime对象格式化为字符串(因此 f )。

答案 2 :(得分:0)

首先使用pd.to_datetime将列转换为datetime字段。

让我们说您有一个带有start_time列的数据框df。

import pandas as pd

df['start_time'] = pd.to_datetime(df['start_time']
df['end_time'] = pd.to_datetime(df['end_time']

df['time_diff'] = (df.end_time - df.start_time) #gets the time in hours

如果要将其转换为小时数,请使用:

df['time_diff'] = df['time_diff'].dt.total_seconds()/(3600.0)

但这不会完全以H:M:S格式给出。