Python 3.X中将每日00:00:00转换为epoch时间报错求助
解决Python 3.X中转换当日00:00:00为Epoch时间的问题
咱们先拆解下你代码里的问题:你先用strftime()把datetime对象转成了字符串today_morning,之后又试图对这个字符串调用strftime()——但字符串类型根本没有这个方法,这就是为什么会抛出AttributeError: 'str' object has no attribute 'strftime'的原因。
在Python 3.X里,咱们可以直接基于datetime对象来构造当日0点的时间,再转成Epoch时间,给你几种靠谱的方案:
方案一:直接构造当日0点的datetime对象
这是最直观的写法,提取当前日期的年、月、日,构造出0点的datetime对象,再用timestamp()方法转成Epoch时间(Python 3.3及以上版本支持):
import datetime today = datetime.datetime.now() # 构造当日00:00:00的datetime对象 today_midnight = datetime.datetime(today.year, today.month, today.day) # 转换为Epoch时间并取整 epoch = int(today_midnight.timestamp()) print(epoch)
方案二:用datetime.combine组合日期和时间
这种写法更贴合Python的风格,把当日的日期对象和最小时间(也就是00:00:00)组合起来:
import datetime # 获取当日的date对象 today_date = datetime.date.today() # 组合日期和0点时间 today_midnight = datetime.datetime.combine(today_date, datetime.time.min) epoch = int(today_midnight.timestamp()) print(epoch)
方案三:处理时区(如果需要UTC时间)
如果你的业务需要基于UTC的当日0点,而非本地时间,可以加上时区信息(需要先安装pytz库:pip install pytz):
import datetime import pytz # 获取UTC时间下的当前时间 utc_now = datetime.datetime.now(pytz.utc) # 构造UTC当日0点的时间对象 utc_midnight = datetime.datetime(utc_now.year, utc_now.month, utc_now.day, tzinfo=pytz.utc) epoch = int(utc_midnight.timestamp()) print(epoch)
这几种方法都避开了你之前的字符串操作误区,直接基于datetime对象处理,既清晰又不容易出错。
内容的提问来源于stack exchange,提问作者Sam P
相关产品推荐
相关产品推荐

