utcnow()废弃后,如何在Python中获取UTC时间偏移?
获取当前时区与UTC的秒级时间差问题
我需要获取当前所在地与UTC的秒级时间差,以柏林时区(UTC+1小时)为例,之前用utcnow()的代码运行正常:
import datetime datetime.datetime.utcnow().timestamp(): 1699017779.016835 datetime.datetime.now().timestamp(): 1699021379.017343 # 相差3600秒,结果正确!
但如今utcnow()已被标记为废弃,我改用带时区对象的now()方法:
datetime.datetime.now(datetime.timezone.utc): 2023-11-03 14:22:59.018573+00:00 datetime.datetime.now(): 2023-11-03 15:22:59.018941 # 晚1小时,结果正确!
此时时间显示是正确的,但获取时间戳时却得到错误结果:
datetime.datetime.now(datetime.timezone.utc).timestamp()) 1699021379.019286 # UTC时间戳实际是本地时间戳 datetime.datetime.now().timestamp()) 1699021379.019619 # 本地时间戳:为何无差异???
本地时间戳正确,但UTC时间戳和本地时间戳完全相同,这明显有问题!
编辑:
查看评论后,我不认同部分评论者的观点——我认为utcnow()本身没问题,它能返回调用时刻的UTC时间戳。请求UTC时间时根本不需要涉及时区!真正的问题似乎是把带UTC时差的地区时间戳当成了UTC/Unix时间戳?
我明确下需求:我要获取当前时区与UTC的秒级时间差,Python里有没有更简便的实现方式?目前的回答和评论都没解决这个问题。
编辑2:
我找到了两种可行的解决方法:
import datetime as dt import time # 解决方法1 ts = time.time() utc = dt.datetime.fromtimestamp(ts, tz=dt.timezone.utc) # 2023-11-06 11:49:30.154083+00:00 local = dt.datetime.fromtimestamp(ts, tz=None) # 2023-11-06 12:49:30.154083 ts_utc = dt.datetime.strptime(str(utc) [0:19], "%Y-%m-%d %H:%M:%S").timestamp() # 1699267770.0 ts_local = dt.datetime.strptime(str(local)[0:19], "%Y-%m-%d %H:%M:%S").timestamp() # 1699271370.0 # 相差3600秒 TimeZoneOffset = ts_local - ts_utc # +3600 (秒) # 解决方法2 TimeZoneOffset = dt.datetime.now().astimezone().utcoffset().total_seconds() # +3600 (秒)
内容的提问来源于stack exchange,提问作者ullix
相关产品推荐
相关产品推荐

