Discuss / Python / strptime的结果默认为无时区,但是当需要计算是则以当前系统时区作为时区的吗?

strptime的结果默认为无时区,但是当需要计算是则以当前系统时区作为时区的吗?

Topic source

Gin阿金

#1 Created at ... [Delete] [Delete and Lock User]

str转换为datetime

注意转换后的datetime是没有时区信息的

但是作业str转datetime后转换成timestamp时,时区是默认为当前系统时区,验证如下:

import re from datetime import datetime, timezone, timedelta dt_str = '2019-3-4 14:47:30' tz_str = 'UTC+8:00'

dt = datetime.strptime(dt_str,'%Y-%m-%d %H:%M:%S') tz = re.match(r'^UTC([-+]?\d{1,2}):\d\d$', tz_str).group(1) tz_utc = timezone(timedelta(hours = int(tz))) dt_utc = dt.replace(tzinfo = tz_utc)

ts_utc= dt_utc.timestamp() ts = dt.timestamp()

print(ts_utc) print(ts) print((ts - ts_utc)/3600)

运行结果: 1551682050.0 1551682050.0 0.0

桂兴牛2号

#2 Created at ... [Delete] [Delete and Lock User]

老弟,你这个逻辑有点问题啊 最后ts-ts_utc不应该等于0啊

Gin阿金

#3 Created at ... [Delete] [Delete and Lock User]

老哥我想表达的就是strptime后再转timestamp时会默认以当前系统时区转换,tz_str = 'UTC+9:00'时ts-ts_utc结果为1,不知道是不是这么理解


  • 1

Reply