登录
首页 >  Golang >  Go问答

IST时区在Go语言的时间包中出现错误

来源:stackoverflow

时间:2024-03-05 21:18:26 100浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《IST时区在Go语言的时间包中出现错误》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

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

}

错误:未知时区 ist

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


解决方案


您无法通过该名称加载印度 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

今天关于《IST时区在Go语言的时间包中出现错误》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>