Python中如何将UTC字符串日期正确转换为UTC时间戳?
UTC时间字符串转UTC时间戳的正确方法
你遇到的问题根源在于:datetime.strptime解析出的是无时区信息的naive datetime对象,调用timestamp()时,Python会默认把这个对象当作本地时区的时间来转换,而非你预期的UTC时间,所以得到了错误的时间戳。
正确的转换方式
方法一:内置库实现(无需第三方依赖)
通过replace()方法给解析后的datetime对象明确指定UTC时区,这样timestamp()就会按照UTC时间计算对应的时间戳:
from datetime import datetime, timezone # 你的UTC时间字符串 utc_time_str = '2023-08-02 14:52:05' # 解析字符串并标记为UTC时区 dt_utc = datetime.strptime(utc_time_str, '%Y-%m-%d %H:%M:%S').replace(tzinfo=timezone.utc) # 转换为毫秒级UTC时间戳 utc_timestamp = dt_utc.timestamp() * 1000 print(utc_timestamp) # 输出:1691031125000.0,对应UTC 2023-08-02 14:52:05
方法二:使用第三方库python-dateutil(更简洁)
如果你的项目允许使用第三方库,python-dateutil可以更便捷地处理时区:
from datetime import datetime from dateutil.tz import tzutc utc_time_str = '2023-08-02 14:52:05' dt_utc = datetime.strptime(utc_time_str, '%Y-%m-%d %H:%M:%S').replace(tzinfo=tzutc()) utc_timestamp = dt_utc.timestamp() * 1000 # 也可以直接用dateutil的解析器自动识别时区(如果字符串带UTC标识的话) # from dateutil import parser # dt_utc = parser.parse(f"{utc_time_str} UTC") # utc_timestamp = dt_utc.timestamp() * 1000
验证结果
转换后的时间戳1691031125000.0对应的UTC时间就是你输入的2023-08-02 14:52:05,解决了原代码的时区转换偏差问题。
内容的提问来源于stack exchange,提问作者Pit Digger
相关产品推荐
相关产品推荐

