如何解析GMT时区Golang

时间:2018-01-24 08:34:10

标签: go timezone

我的时区ID如下:(GMT+01:00) Brussels, Copenhagen, Madrid, Paris。从这个字符串中获取time.Location的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您需要从字符串中提取区域名称,然后将其转换为位置。

您可以使用正则表达式执行第一部分,后者使用time.LoadLocation

package main

import (
    "fmt"
    "regexp"
    "time"
)

func main() {
    re := regexp.MustCompile(`^\(([A-Z]+)[+-:0-9]+\).*`)
    input := "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris."

    matches := re.FindStringSubmatch(input)
    fmt.Println("Found timezone string: ", matches[1])

    l, _ := time.LoadLocation(matches[1])
    fmt.Println("Found timezone:", l)

    fmt.Println(time.Now())
    fmt.Println(time.Now().In(l))
}

打印出来:

$ go run ./main.go
Found timezone string:  GMT
Found timezone: GMT
2018-01-24 10:30:28.989832073 +0100 CET
2018-01-24 09:30:28.989860913 +0000 GMT

警告:我忽略了错误和不匹配的正则表达式,你可能不应该这样做。