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

如何将十进制时间列表转为仅含时分的datetime对象(去除年月日)

问题背景

给定十进制格式的时间戳列表:

T = [10.749957462142994, 10.90579301143351, 10.981580990083001]

已通过以下代码提取出时分字符串列表['10:44', '10:54', '10:58']:

hours =  [int(x) for x in T]
minutes = [(x*60) % 60 for x in T]

print("%d:%02d"%(hours[0], minutes[0]), "%d:%02d"%(hours[1], minutes[1]), "%d:%02d"%(hours[2], minutes[2]))

尝试用datetime模块转换为仅含时分的datetime对象时:

from datetime import datetime
DT = []
for i,t in enumerate(T):
    string = str("%d:%02d"%(hours[i], minutes[i]))
    datetime_object = datetime.strptime(string, '%H:%M')
    DT.append(datetime_object)

得到的结果默认带有1900年1月1日的日期信息:

DT
[datetime.datetime(1900, 1, 1, 10, 44),
 datetime.datetime(1900, 1, 1, 10, 54),
 datetime.datetime(1900, 1, 1, 10, 58)]

需要得到仅包含时分的时间对象(类似datetime.datetime(10, 44)的形式)。

解决方案

首先明确:Python的datetime.datetime对象必须包含年、月、日、时、分等完整时间字段,不存在只保留时分的datetime对象,你看到的1900-01-01是strptime在缺少日期参数时自动填充的默认值。

如果只需要处理时分信息,推荐以下几种替代方案:

1. 使用datetime.time对象(推荐)

datetime.time是专门用于表示时间(不含日期)的类型,完全匹配你的需求:

from datetime import time
DT = []
for h, m in zip(hours, minutes):
    # 将分钟的浮点数取整为整数
    time_obj = time(int(h), int(round(m)))
    DT.append(time_obj)

执行后得到的结果:

DT
[datetime.time(10, 44), datetime.time(10, 54), datetime.time(10, 58)]

2. 自定义类存储时分

如果需要更灵活的结构,可以自定义一个简单的类来仅存储时分信息:

class TimeOnly:
    def __init__(self, hour, minute):
        self.hour = hour
        self.minute = minute
    
    def __repr__(self):
        return f"TimeOnly({self.hour}, {self.minute})"

DT = [TimeOnly(int(h), int(round(m))) for h, m in zip(hours, minutes)]

输出结果:

DT
[TimeOnly(10, 44), TimeOnly(10, 54), TimeOnly(10, 58)]

3. 保留datetime对象,按需格式化输出

如果必须使用datetime对象,可以在需要展示或使用时,仅提取时分部分:

# 生成datetime列表(保留日期字段)
from datetime import datetime
DT = []
for h, m in zip(hours, minutes):
    time_str = f"{h}:{int(round(m)):02d}"
    dt_obj = datetime.strptime(time_str, '%H:%M')
    DT.append(dt_obj)

# 仅获取时分字符串
formatted_times = [dt.strftime("%H:%M") for dt in DT]
print(formatted_times)  # 输出: ['10:44', '10:54', '10:58']

# 或直接访问时分属性
for dt in DT:
    print(dt.hour, dt.minute)  # 输出对应时和分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:20:28