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
相关产品推荐
相关产品推荐

