我需要将RFC3339格式的任何给定时区转换为RFC3339格式的系统时间,但是对于像IST这样的少数时区来说,它会引发错误并且时间仍然是UTC。 对于转换哪个功能更好的服务? time.parse或time.In。
我试图将UTC转换为IST,但失败了。
package main
import (
"fmt"
"time"
)
func main() {
//now time
now := time.Now()
fmt.Println("now ", now)
zone, _ := now.Zone()
fmt.Println("zone->", zone)
ll, llerr := time.LoadLocation(zone)
fmt.Println("Load Location", ll, llerr)
// Convert the given time to system based time zone
t, err := time.ParseInLocation(time.RFC3339, "2017-04-25T23:03:00Z", ll)
fmt.Println("t - parsein", t)
fmt.Println("err - parsein", err)
//fmt.Println("t2 - parse", t.In(ll))
}
错误:unknown time zone IST
预期:需要将任何时区转换为系统时区。
答案 0 :(得分:0)
您不能通过该名称加载印度IST时区,因为名称“ IST”不明确。这可能意味着印度,爱尔兰,以色列等时区,它们具有不同的时区偏移量和规则。有关详细信息,请参见Why is time.Parse not using the timezone?
如果IST是您的本地时区,则time.Local
变量将表示该时区。如果您有time.Time
,则可以使用Time.In()
“切换”到另一个区域,Time.Local()
也会返回您本地区域的时间。
当然,当在另一个区域中运行时,此代码将“中断”。为了确保它在所有地方的行为都一样,请显式加载印度IST区域,如下所示:
loc, err := time.LoadLocation("Asia/Kolkata")
if err != nil {
panic(err)
}
fmt.Println(time.Now())
fmt.Println(time.Now().In(loc))
在Go Playground上它将输出:
2009-11-10 23:00:00 +0000 UTC m=+0.000000001
2009-11-11 04:30:00 +0530 IST