关于python:Python-datetime-时区转换大坑

37次阅读

共计 691 个字符,预计需要花费 2 分钟才能阅读完成。

背景:
从数据库获取了工夫

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

正文完
 0