如何将`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
相关产品推荐
相关产品推荐

