如何在 Go 中将时间偏移量转换为位置/时区



给定任意时间偏移量,如何创建一个表示该时间偏移量的可用time.Location对象?

以下代码使用偏移量分析时间,但随后fmt.Println(t.Location())不返回任何信息:

func main() {
    offset := "+1100"
    t, err := time.Parse("15:04 GMT-0700","15:06 GMT"+offset)
    if err != nil {
        fmt.Println("fail", err)
    }
    fmt.Println(t)
    fmt.Println(t.UTC())
    fmt.Println(t.Location())
}

游乐场:https://play.golang.org/p/j_E28qJ8Vgy

基本上我有一些时间偏移量的时间数据,但没有位置数据,我想创建一个time.Location对象以确保记录 GMT 偏移量。然后能够输出相对于最终用户实际位置的时间偏移时间。

使用:

loc := time.FixedZone("UTC+11", +11*60*60)

然后设置为此位置:

t = t.In(loc)

试试这个:

package main
import (
    "fmt"
    "time"
)
func main() {
    loc := time.FixedZone("UTC+11", +11*60*60)
    t := time.Now()
    fmt.Println(t)
    fmt.Println(t.Location())
    t = t.In(loc)
    fmt.Println(t)
    fmt.Println(t.Location())
    fmt.Println(t.UTC())
    fmt.Println(t.Location())
}

输出:

2009-11-10 23:00:00 +0000 UTC m=+0.000000001
UTC
2009-11-11 10:00:00 +1100 UTC+11
UTC+11
2009-11-10 23:00:00 +0000 UTC
UTC+11
if len(offset) == 5 {
    hours, ok1 := strconv.ParseInt(offset[:3], 10, 0)
    mins, ok2 := strconv.ParseInt(offset[3:5], 10, 0)
    if ok1 == nil && ok2 == nil {
        t = t.In(time.FixedZone("Fixed", int((hours*60+mins)*60)))
        fmt.Println(t)
        fmt.Println(t.Location())
    }
}

相关内容

  • 没有找到相关文章