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

如何将`2022-11-20 21:00:00+0900`转换为IST?Go语言时间格式问题

解决Go语言中时间戳转印度标准时间(IST)的格式问题

你的代码报错核心原因是解析用的格式字符串和输入的时间戳格式完全不匹配,且ParseInLocation的用法有误——这个函数是用指定时区解析符合格式的字符串,而非直接转换时区。正确的处理逻辑应该是:先解析原始时间戳得到time.Time对象,再将其转换到IST时区,最后按需求格式化输出。

正确实现步骤

  • 第一步:使用和输入时间戳匹配的格式字符串解析原始时间。输入的2022-11-20 21:00:00+0900对应的Go参考时间格式是2006-01-02 15:04:05-0700(Go的时间格式必须固定参考Mon Jan 2 15:04:05 MST 2006来对应)。
  • 第二步:加载IST时区(Asia/Calcutta)。
  • 第三步:将解析后的时间转换到IST时区,再用你需要的格式(比如Jan _2 2006 3:04:05 PM)格式化输出。

完整代码示例

package main

import (
	"fmt"
	"time"
)

func main() {
	// 加载IST时区
	loc, err := time.LoadLocation("Asia/Calcutta")
	if err != nil {
		fmt.Println("加载时区失败:", err)
		return
	}

	// 原始时间戳和对应的解析格式
	timestamp := "2022-11-20 21:00:00+0900"
	parseFormat := "2006-01-02 15:04:05-0700"

	// 解析原始时间(时间戳自带时区偏移,无需额外指定)
	parsedTime, err := time.Parse(parseFormat, timestamp)
	if err != nil {
		fmt.Println("解析时间失败:", err)
		return
	}

	// 转换到IST时区并格式化输出
	istTime := parsedTime.In(loc)
	outputFormat := "Jan _2 2006 3:04:05 PM"
	fmt.Println(istTime.Format(outputFormat))
}

代码说明

  • time.Parse会根据时间戳自带的+0900时区信息解析出正确的时间点,无需额外指定时区。
  • parsedTime.In(loc)将时间转换到目标IST时区。
  • 最后用Format方法按照你需要的格式输出结果。

内容的提问来源于stack exchange,提问作者Vinay Kumar Rasala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:30:53