Go工具集

全球时区转换

2025-04-19 00:30:35

原理讲解

在美国,夏令时从3月的第二个星期日开始,到11月的第一个星期日结束,并在当地时间凌晨2点更改时间。 春天开始施行夏令时时,在当天的凌晨2点人们要把时钟拨到3点,在秋天结束夏令时时,时钟要从凌晨2点拨到1点。 每年的夏令时时间总共持续34周(238天),约占全年的65%。

  • 时区划分:全球共分为 24 个时区,以本初子午线(0° 经线)为基准,向东、向西各划分 12 个时区。每个时区相差 1 小时,东边的时区时间比西边的早。
  • 计算时差:北京时间与圣何塞所在的太平洋时间相差的时区数为8−(−8)=16个时区,所以时差为 16 小时。当北京时间是上午 8 点时,圣何塞时间是前一天的下午 4 点。
  • 进行时区转换时,要先确定两个地区所在的时区,计算出时区差,再根据 “东加西减” 的原则进行计算。如果涉及夏令时,还要根据具体情况进行调整。
  • IANA时区数据库包含600+时区,完整时区列表可参考:Timezone Database
  • CST 可能指:中国标准时间(UTC+8)/美国中部标准时间(UTC-6);IST 可能指:印度标准时间(UTC+5:30)/爱尔兰夏令时(UTC+1)

时区调整时,物理机的Location会改变,时区由UTC+2变为UTC+1。所以海外部署服务时间处理都需要携带时区信息,使用RFC3339这种格式来操作,或者Location都设为UTC0来服务。

Go实现

in, err := time.ParseInLocation(time.DateTime, input, cst)
in.In(loc).Format(time.DateTime)

时区表

UTC偏移 时区缩写 代表地区 备注
UTC-12:00 IDLW 国际日期变更线西侧 仅少数无人岛屿
UTC-11:00 SST 美属萨摩亚
UTC-10:00 HST 夏威夷 美国夏威夷州
UTC-09:00 AKST 阿拉斯加(标准时间) 美国阿拉斯加大部分地区
UTC-08:00 PST 太平洋标准时间 美国洛杉矶、加拿大温哥华
UTC-07:00 MST 山地标准时间 美国丹佛、加拿大埃德蒙顿
UTC-06:00 CST 中部标准时间 美国芝加哥、墨西哥城
UTC-05:00 EST 东部标准时间 美国纽约、加拿大蒙特利尔
UTC-04:00 AST 大西洋标准时间 加拿大哈利法克斯、智利圣地亚哥
UTC-03:30 NST 纽芬兰标准时间 加拿大纽芬兰
UTC-03:00 ART 阿根廷时间 阿根廷、巴西部分城市
UTC-02:00 FNT 费尔南多·迪诺罗尼亚群岛 巴西离岛
UTC-01:00 AZOT 亚速尔群岛 葡萄牙属地
UTC±00:00 GMT/UTC 基准时区 英国伦敦、冰岛、西非
UTC+01:00 CET 中欧时间 法国巴黎、德国柏林
UTC+02:00 EET 东欧时间 希腊雅典、埃及开罗
UTC+03:00 MSK 莫斯科时间 俄罗斯西部、土耳其伊斯坦布尔
UTC+03:30 IRST 伊朗标准时间 伊朗
UTC+04:00 GST 海湾标准时间 阿联酋迪拜、格鲁吉亚
UTC+04:30 AFT 阿富汗时间 阿富汗
UTC+05:00 PKT 巴基斯坦标准时间 巴基斯坦、马尔代夫
UTC+05:30 IST 印度标准时间 印度、斯里兰卡
UTC+05:45 NPT 尼泊尔时间 尼泊尔
UTC+06:00 BDT 孟加拉时间 孟加拉国、哈萨克斯坦西部
UTC+06:30 MMT 缅甸时间 缅甸、科科斯群岛
UTC+07:00 ICT 中南半岛时间 泰国曼谷、越南河内
UTC+08:00 CST 中国标准时间 北京、新加坡、马来西亚
UTC+09:00 JST 日本标准时间 东京、韩国首尔
UTC+09:30 ACST 澳大利亚中部标准时间 澳大利亚阿德莱德
UTC+10:00 AEST 澳大利亚东部标准时间 悉尼、关岛
UTC+10:30 LHST 豪勋爵岛时间 澳大利亚豪勋爵岛
UTC+11:00 NCT 新喀里多尼亚时间 太平洋西南部岛屿
UTC+12:00 NZST 新西兰标准时间 奥克兰、斐济
UTC+12:45 CHAST 查塔姆群岛时间 新西兰查塔姆群岛
UTC+13:00 TOT 汤加时间 汤加、萨摩亚
UTC+14:00 LINT 莱恩群岛时间 基里巴斯
Web Analytics Made Easy - Statcounter