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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:33