在Go中获取有效时区列表

Bad*_*ate 4 timezone go

我想编写一个方法,time.Format()使用调用接受的公共时区填充Go语言数组,以便在HTML模板中使用(表单选择允许他们读取和选择他们的时区).有一个共同的方法来做到这一点?

Mar*_*ovy 8

要获取时区列表,您可以使用以下内容:

package main

import (
    "fmt"
    "io/ioutil"
    "strings"
)

var zoneDirs = []string{
    // Update path according to your OS
    "/usr/share/zoneinfo/",
    "/usr/share/lib/zoneinfo/",
    "/usr/lib/locale/TZ/",
}

var zoneDir string

func main() {
    for _, zoneDir = range zoneDirs {
        ReadFile("")
    }
}

func ReadFile(path string) {
    files, _ := ioutil.ReadDir(zoneDir + path)
    for _, f := range files {
        if f.Name() != strings.ToUpper(f.Name()[:1]) + f.Name()[1:] {
            continue
        }
        if f.IsDir() {
            ReadFile(path + "/" + f.Name())
        } else {
            fmt.Println((path + "/" + f.Name())[1:])
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
...
Run Code Online (Sandbox Code Playgroud)


jma*_*ney 6

Go的时间pkg使用时区数据库。

您可以像这样加载时区位置:

loc, err := time.LoadLocation("America/Chicago")
if err != nil {
    // handle error
}

t := time.Now().In(loc)
Run Code Online (Sandbox Code Playgroud)

Format功能与设置时区无关,该功能采用固定的参考时间,可用于设置日期格式。看一下pkg docs的时间。

例如:

fmt.Println(t.Format("MST")) // outputs CST
Run Code Online (Sandbox Code Playgroud)

这是一个正在运行的示例

  • 它没有回答问题。为什么这么多人点赞呢。 (7认同)