You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

额外优化建议

  1. SQL查询优化:不要用LIKE匹配日期和ID,直接用=更准确,同时使用参数化查询避免SQL注入:
crsr.execute("SELECT * FROM tblsolar WHERE tanggal = %s AND id = %s;", (tgl, '1001'))
  1. 时间格式校验:如果数据库返回的时间是12小时制(带AM/PM),需要把strptime的格式字符串改成'%I:%M:%S %p'。

内容的提问来源于stack exchange,提问作者sen yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:55:15