如何为time.struct_time对象添加次日日期?技术求助
给time.struct_time对象添加次日日期的简洁方法
嘿,我懂你现在的痛点——反复复制已有代码来处理struct_time的次日日期实在太冗余了!其实Python里有更优雅的解决方案,不用手动去处理月份切换、闰年这些头疼的边界情况,咱们借助datetime模块就能轻松搞定。
核心思路:转换为datetime对象处理
time.struct_time本身是不可变类型,而且没有直接的日期加减方法,但datetime模块的timedelta可以完美解决日期增量的问题,步骤很简单:
把struct_time转成datetime对象
先用time.mktime()把struct_time转成时间戳,再用datetime.fromtimestamp()生成datetime实例:import time from datetime import datetime, timedelta # 你的示例struct_time对象 original_time = time.struct_time(tm_year=2018, tm_mon=2, tm_mday=22, tm_hour=17, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=53, tm_isdst=-1) # 转换为datetime dt_obj = datetime.fromtimestamp(time.mktime(original_time))添加一天(获取次日),再转回struct_time
用timedelta(days=1)给datetime加一天,最后用timetuple()转回struct_time格式:# 计算次日的datetime next_day_dt = dt_obj + timedelta(days=1) # 转回struct_time next_day_struct = next_day_dt.timetuple()批量处理self.epg_time_1列表
如果要给列表里所有struct_time对象都加次日,直接用列表推导式就行,一行搞定:# 批量生成所有元素的次日struct_time self.epg_time_1_next_days = [ (datetime.fromtimestamp(time.mktime(t)) + timedelta(days=1)).timetuple() for t in self.epg_time_1 ]
额外提示
如果你的struct_time是UTC时间,记得把datetime.fromtimestamp()换成datetime.utcfromtimestamp(),避免本地时区带来的偏差哦!
这种方法的好处是完全不用自己写逻辑处理月末、年末的日期跳转,datetime会自动帮你处理所有边界情况,比重复写冗余代码靠谱多了。
内容的提问来源于stack exchange,提问作者Knight Rider
相关产品推荐
相关产品推荐

