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

Pandas使用tz_convert转换时区时Etc/GMT+2与Africa/Maputo结果不一致问题

Pandas时区转换Etc/GMT与地区时区结果差异原因

核心原因:Etc/GMT系列时区偏移符号规则和常规认知相反

IANA时区数据库中的Etc/GMT±X系列遵循POSIX标准的偏移定义,和我们日常使用的GMT偏移符号完全相反:

  • 日常认知的GMT+2:表示比UTC快2小时,对应格林威治以东的时区
  • POSIX标准的Etc/GMT+2:表示比UTC慢2小时(UTC-2),对应格林威治以西的时区;Etc/GMT-2才对应比UTC快2小时的UTC+2时区

这就是你使用tz_convert('Etc/GMT+2')结果错误、用Etc/GMT-2结果正确的直接原因。

推荐优先使用地区时区标识符Africa/Maputo的原因

Etc/GMT±X属于固定偏移时区,不包含任何地区的时区政策变动(比如夏令时调整、官方时区变更)记录。而Africa/Maputo是对应莫桑比克的地区级时区标识符,内置了该地区所有历史时区规则:

  • 你示例中2019年的时间,莫桑比克未实行夏令时,固定为UTC+2,所以Africa/Maputo和Etc/GMT-2转换结果一致
  • 如果处理莫桑比克1976-1982年实行夏令时的时间段数据,Etc/GMT-2会得到错误结果,Africa/Maputo会自动适配当时的UTC+3夏令时偏移

示例代码验证

import pandas as pd 
import numpy as np

np.random.seed(2019)
N = 1000
rng = pd.date_range('2019-01-01', freq='10Min', periods=N)
df = pd.DataFrame(np.random.rand(N, 3), columns=['temp','depth','acceleration'], index=rng)

# 错误结果:实际转成了UTC-2
print(df.tz_localize('UTC').tz_convert('Etc/GMT+2'))
# 正确结果:对应UTC+2
print(df.tz_localize('UTC').tz_convert('Etc/GMT-2'))
# 正确结果:适配莫桑比克时区规则
print(df.tz_localize('UTC').tz_convert('Africa/Maputo'))

内容的提问来源于stack exchange,提问作者tull12 BULL12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:48:03