将datetime转回time.struct_time时报TypeError,求技术解决方案
解决datetime转time.struct_time时的TypeError问题
我来帮你搞定这个转换报错的问题!你遇到的TypeError: expected string or buffer,十有八九是因为误用了time.strptime()来直接转换datetime对象——这个函数的第一个参数要求是字符串,不是datetime实例,所以才会触发类型错误。
这里给你两种靠谱的解决方法:
方法1:用datetime内置的timetuple()(最推荐)
datetime对象自带的timetuple()方法可以直接返回对应的time.struct_time对象,一步到位,简单高效:
import datetime import time # 假设你已经得到了调整到次日的half_hour datetime对象 half_hour = datetime.datetime.now() + datetime.timedelta(days=1) # 模拟你的场景 # 直接转换 struct_time_result = half_hour.timetuple() print(type(struct_time_result)) # 输出 <class 'time.struct_time'>
方法2:先转字符串再用time.strptime()
如果你一定要用time.strptime(),那就得先把datetime对象转换成符合格式的字符串,再传入函数:
# 先将datetime转为指定格式的字符串 dt_string = half_hour.strftime("%Y-%m-%d %H:%M:%S") # 再用strptime解析成struct_time struct_time_result = time.strptime(dt_string, "%Y-%m-%d %H:%M:%S")
为什么之前会报错?
你之前的代码应该是直接把half_hour这个datetime对象传给了time.strptime(),而这个函数只接受字符串作为第一个参数,自然就抛出了类型错误。用timetuple()是最直接的转换方式,不需要额外处理字符串格式,推荐优先使用。
另外提个小提醒:如果你的datetime对象包含时区信息(带tzinfo),timetuple()会自动忽略时区,转换成当前系统的本地时间对应的struct_time;如果需要处理时区,记得先把datetime转成目标时区的时间再做转换哦。
内容的提问来源于stack exchange,提问作者Knight Rider
相关产品推荐
相关产品推荐

