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

Python使用strptime将时间字符串转为无秒数的datetime.time对象

解决Python datetime.time对象输出不带秒的问题

首先明确核心逻辑:你通过%H:%M格式解析得到的datetime.time对象本身已经符合业务要求,它的second、microsecond属性默认就是0,只是Python内置的time类型默认的字符串表示会输出HH:MM:SS格式,并不是对象携带了多余的秒数据。


场景1:仅需展示时为HH:MM格式,保留原生datetime.time类型

这是最推荐的方案,完全符合要求输出为datetime.time类型的规则,只需要在打印输出时做格式化即可,不需要修改对象本身:

基础代码示例:

from datetime import datetime
start_hour = input("Enter starting hour: ")
# 解析得到的time对象second属性默认为0
start_object = datetime.strptime(start_hour, '%H:%M').time()
# 输出时用strftime格式化
print(start_object.strftime("%H:%M"))
# 验证类型为原生datetime.time
print(type(start_object)) # 输出 <class 'datetime.time'>

调整后的转换函数:

可以显式将秒、微秒设为0,避免异常输入导致的问题:

import datetime
def convertir_str_en_heure(heure):
    if heure and heure.strip():
        time_obj = datetime.datetime.strptime(heure,"%H:%M").time()
        # 显式清空秒和微秒,确保符合要求
        return time_obj.replace(second=0, microsecond=0)
    return None

场景2:要求直接打印对象就输出HH:MM格式,且类型仍属于datetime.time

如果作业要求直接print(time对象)就输出不带秒的格式,可以自定义datetime.time的子类,重写字符串表示方法,子类实例仍然会被判定为datetime.time类型:

代码示例:

import datetime
# 自定义time子类,重写字符串输出格式
class TimeWithoutSecond(datetime.time):
    def __str__(self):
        return self.strftime("%H:%M")

def convertir_str_en_heure(heure):
    if not heure or not heure.strip():
        return None
    raw_time = datetime.datetime.strptime(heure,"%H:%M").time()
    # 返回自定义子类实例
    return TimeWithoutSecond(raw_time.hour, raw_time.minute)

# 测试
t = convertir_str_en_heure("10:00")
print(t) # 输出 10:00
print(isinstance(t, datetime.time)) # 输出 True,符合类型要求

补充说明

如果要求必须使用原生datetime.time类型、不能用子类,只需向老师说明:原生datetime.time的默认打印规则就是带秒,但是对象的秒值本身为0,符合业务逻辑,仅需在输出时格式化即可,不属于代码逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:54:05