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

如何用sys.stdout.write格式化输出一致格式的timedelta

统一datetime.timedelta的输出格式(仅用sys.stdout.write)

要解决timedelta默认输出格式不一致的问题,核心是手动解析timedelta的总时长,按指定格式拼接字符串,再用sys.stdout.write输出。以下是实现代码:

import sys
from datetime import timedelta

def format_timedelta(td):
    # 转换为总毫秒数,统一处理正负与时间单位
    total_ms = td.total_seconds() * 1000
    sign = '-' if total_ms < 0 else ''
    abs_ms = abs(total_ms)
    
    # 拆分小时、分钟、秒、毫秒
    hours = int(abs_ms // 3600000)
    remaining_ms = abs_ms % 3600000
    minutes = int(remaining_ms // 60000)
    remaining_ms %= 60000
    seconds = int(remaining_ms // 1000)
    milliseconds = int(remaining_ms % 1000)
    
    # 处理小时的显示格式:正数补零到两位,负数小时为0时显示单个0
    hour_str = f"{hours}" if (sign and hours == 0) else f"{hours:02d}"
    
    return f"{sign}{hour_str}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}"

# 示例测试
td_list = [
    timedelta(milliseconds=2),
    timedelta(0),
    timedelta(milliseconds=-5)
]

# 格式化后用制表符分隔,写入标准输出
formatted_output = '\t'.join(format_timedelta(td) for td in td_list)
sys.stdout.write(f"{formatted_output}\n")

关键逻辑说明

  1. 统一时间单位:通过total_seconds()将timedelta转换为总毫秒数,避免默认输出中因内部存储(days/seconds/microseconds)导致的格式差异(比如负时间差显示-1 day, 23:59:59.995000)。
  2. 格式标准化:
    • 分钟、秒固定为两位,毫秒固定为三位,确保对齐。
    • 针对负时间差的特殊处理:当小时为0时,显示-0:而非-00:,匹配你需要的格式。
  3. 仅用sys.stdout.write:将所有格式化后的字符串用制表符拼接,最后一次性写入标准输出,完全不依赖print函数。

运行上述代码后,输出将严格符合要求:

00:00:00.002 00:00:00.000 -0:00:00.005

内容的提问来源于stack exchange,提问作者Ramanan T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:15:10