时标gogolang中的IST时区错误

时间:2019-06-24 12:12:04

标签: go time

我需要将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

预期:需要将任何时区转换为系统时区。

1 个答案:

答案 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