如何将“X days HH:MM:SS.ffffff”格式的Datetime字符串转为分钟?
将特定格式时间字符串转换为分钟的简洁实现
你需要把形如0 days 01:32:56.696000、2 days 05:12:55.781000的时间字符串转换为分钟,现有代码过于冗长,以下是两种更简洁的实现方式:
原实现代码
def index_nth_occurrence_string(original_string, find_string, nth_occurence): sep = original_string.split(find_string, nth_occurence) if len(sep) <= nth_occurence: return -1 return len(original_string) - len(sep[-1]) - len(find_string) def str_datetime_to_minute(datetime_str): #datetime_str format = '0 days 01:32:56.696000' idx_first_space = index_nth_occurrence_string(original_string=datetime_str, find_string=' ', nth_occurence=1) day_val = datetime_str[:idx_first_space] idx_second_space = index_nth_occurrence_string(original_string=datetime_str, find_string=' ', nth_occurence=2) time_val = datetime_str[idx_second_space + 1:] hh_mm_ss = time_val.split('.')[0] t = hh_mm_ss.split(':') total_minutes = int(day_val) * 1440 + int(t[0]) * 60 + int(t[1]) * 1 + int(t[2]) / 60 total_minutes = total_minutes.__round__(2) return total_minutes val1 = '0 days 01:32:56.696000' val2 = '2 days 05:12:55.781000' print(f"val1 minutes = {str_datetime_to_minute(val1)}") print(f"val2 minutes = {str_datetime_to_minute(val2)}")
优化方案1:直接字符串拆分计算
利用Python原生字符串拆分方法替代自定义的位置查找函数,代码更简洁直观:
def str_to_minutes(time_str): # 拆分字符串获取天数和时间部分 parts = time_str.split() days = int(parts[0]) # 拆分时间部分为时、分、秒(含小数) hours, minutes, seconds = parts[2].split(':') seconds = float(seconds) # 计算总分钟数 total_minutes = days * 1440 + int(hours)*60 + int(minutes) + seconds / 60 return round(total_minutes, 2) val1 = '0 days 01:32:56.696000' val2 = '2 days 05:12:55.781000' print(f"val1 minutes = {str_to_minutes(val1)}") print(f"val2 minutes = {str_to_minutes(val2)}")
优化方案2:利用datetime.timedelta(更优雅)
借助Python内置的timedelta对象处理时间间隔,自动计算总时长,可读性更强:
from datetime import timedelta def str_to_minutes(time_str): # 拆分出天数和时间部分 days_part, _, time_part = time_str.partition(' days ') days = int(days_part) # 拆分时间部分 hours, minutes, seconds = time_part.split(':') # 构造时间间隔对象 time_delta = timedelta( days=days, hours=int(hours), minutes=int(minutes), seconds=float(seconds) ) # 转换为总分钟数并保留两位小数 return round(time_delta.total_seconds() / 60, 2) val1 = '0 days 01:32:56.696000' val2 = '2 days 05:12:55.781000' print(f"val1 minutes = {str_to_minutes(val1)}") print(f"val2 minutes = {str_to_minutes(val2)}")
输出结果
两种优化方案都能得到和原代码一致的输出:
val1 minutes = 92.93 val2 minutes = 3192.92
内容的提问来源于stack exchange,提问作者Swap
相关产品推荐
相关产品推荐

