You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将“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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:17:54