背景:
从数据库获取了时间
cursor = db.cursor()
cursor.execute('select ts from xxx order by id desc limit 1')
data1 = cursor.fetchall()
my_time = data1[0][0]
my_time
是个 datetime 类型
需要和当前时间作对比
cn_zone = pytz.timezone('Asia/Shanghai')
def get_cur_time():
return datetime.datetime.now(cn_zone)
# 直接减会报错
# can't subtract offset-naive and offset-aware datetimes
get_cur_time() - my_time
考虑转换成 timestamp 再计算
大坑开始!my_time
由于开始是个无时区的 datetime,无论用各种方法都无法改变其 timestamp 的值。
猜测是其生成的时候,timestamp 已经确定了,后续无法改变。
另:
转换时区的时候有另一个坑:
https://www.cnblogs.com/ajianbeyourself/p/11982529.html
下面这样用,会把时区变为 LMT+0806(多八小时零六分)
cn_zone = pytz.timezone('Asia/Shanghai')
my_time.replace(cn_zone)
正确用法:
用 datetime 相减,但要用 localize
来纠正
ltime = cn_zone.localize(my_time)
# 这样再减就可以了
(get_cur_time() - ltime).seconds
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。