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

在Python Dataclass中,时间格式字段应选用何种类型?

Dataclass中Duration字段的类型选择

你应该选用datetime.timedelta类型,它是Python标准库中专门用于表示时间间隔的类型,完美适配你需要判断时长是否超过x天/小时的需求,支持直接进行大小比较、加减运算等操作。

转换方法

JSON返回的2.00:00:15.0830000格式是天数.小时:分钟:秒.微秒,需要先将字符串解析为timedelta对象,示例转换函数如下:

from datetime import timedelta

def parse_duration(duration_str: str) -> timedelta:
    # 拆分天数与时分秒部分
    days_part, time_part = duration_str.split('.', 1)
    days = int(days_part)
    # 拆分时分秒与微秒部分
    hms_part, us_part = time_part.split('.', 1)
    hours, minutes, seconds = map(int, hms_part.split(':'))
    # 确保微秒为6位,不足补0后取前6位
    microseconds = int(us_part.ljust(6, '0')[:6])
    return timedelta(
        days=days,
        hours=hours,
        minutes=minutes,
        seconds=seconds,
        microseconds=microseconds
    )

修改后的Dataclass示例

from dataclasses import dataclass
from datetime import timedelta

def parse_duration(duration_str: str) -> timedelta:
    days_part, time_part = duration_str.split('.', 1)
    days = int(days_part)
    hms_part, us_part = time_part.split('.', 1)
    hours, minutes, seconds = map(int, hms_part.split(':'))
    microseconds = int(us_part.ljust(6, '0')[:6])
    return timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds, microseconds=microseconds)

@dataclass
class Values:
    duration: timedelta

# 实例化与使用示例
json_duration = "2.00:00:15.0830000"
values = Values(duration=parse_duration(json_duration))

# 判断时长是否超过2天
if values.duration > timedelta(days=2):
    print("时长超过2天")
else:
    print("时长未超过2天")

# 判断时长是否超过50小时
if values.duration > timedelta(hours=50):
    print("时长超过50小时")
else:
    print("时长未超过50小时")

为什么不选其他类型?

  • date/datetime:这两个类型用于表示具体的时间点,而非时间间隔,无法直接满足你对时长比较的需求。
  • 数值类型(如int/float):需要自行处理天、小时、分钟等单位的转换,容易出错且可读性差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:55:35