如何在Python中计算本地时间与MySQL数据库时间的时间差?
问题解决及修正方案
核心错误分析
你代码里的报错根源是变量混淆:你把想要计算的结果变量x当成了strptime的输入参数,但此时x还未定义;就算后续定义了,它也是timedelta类型,不符合strptime需要字符串的要求。另外还要注意从MySQL获取的z的类型,这会影响时间转换的方式。
修正代码(分两种情况)
情况1:从数据库拿到的z是字符串类型
如果z是类似"8:09:34"的字符串,直接用strptime转换为datetime对象后计算差值:
import datetime as dt # y是你已获取的当前时间字符串,比如"20:01:10" # z是从数据库查询到的时间字符串,比如"8:09:34" start_time = dt.datetime.strptime(z, '%H:%M:%S') end_time = dt.datetime.strptime(y, '%H:%M:%S') time_diff = end_time - start_time print(time_diff) # 输出示例: 11:51:36
情况2:从数据库拿到的z是datetime.time对象
如果MySQL的目标字段是TIME类型,查询返回的z会是datetime.time对象,此时需要将其结合日期转换为datetime对象再计算:
import datetime as dt now = dt.datetime.now() # 用当前日期结合时间对象生成完整datetime start_dt = dt.datetime.combine(now.date(), z) end_dt = dt.datetime.combine(now.date(), now.time()) time_diff = end_dt - start_dt print(time_diff)
额外优化建议
- SQL查询优化:不要用
LIKE匹配日期和ID,直接用=更准确,同时使用参数化查询避免SQL注入:
crsr.execute("SELECT * FROM tblsolar WHERE tanggal = %s AND id = %s;", (tgl, '1001'))
- 时间格式校验:如果数据库返回的时间是12小时制(带AM/PM),需要把
strptime的格式字符串改成'%I:%M:%S %p'。
内容的提问来源于stack exchange,提问作者sen yang
相关产品推荐
相关产品推荐

