2016-10-19 42 views
2

我想編寫一個方法,該列表將使用調用time.Format()接受的常用時區填充Go語言數組,以用於HTML模板(表單選擇允許他們閱讀並選擇他們的時區)。有沒有一種常見的方法來做到這一點?獲取有效時區列表中的有效時區

+0

'func(t Time)Format(la yout string)''不需要時區(除了「MST」以指示您想要輸出時區的位置)。 –

+0

[time.LoadLocation](https://golang.org/pkg/time/#LoadLocation)的文檔介紹了Go何時查找時區信息。 –

+0

如果你可以調用一個C++庫,我可以展示如何做到這一點。 –

回答

2

要獲得時區的列表,你可以使用類似:

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:]) 
     } 
    } 
} 

輸出:

Africa/Abidjan 
Africa/Accra 
Africa/Addis_Ababa 
Africa/Algiers 
Africa/Asmara 
Africa/Asmera 
Africa/Bamako 
Africa/Bangui 
... 
+0

太棒了!雖然,我認爲在'ReadFile(「」)中有一個拼寫錯誤 - 它不應該是'ReadFile(zoneDir)'嗎? – BadPirate

+1

沒有,沒有錯字)這是因爲遞歸。它更像是原型,所以你可以改進和集成某處,但你可能需要存儲結果而不是僅僅打印。 –

+0

任何想法如何包含位於'$ GOROOT/lib/time'內的默認回退數據? – jtrein

2

Go's time pkg使用timezone數據庫。

您可以加載一個時區的位置是這樣的:

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

t := time.Now().In(loc) 

Format功能不相關的設置時區,這個功能需要一個固定的參考時間,使您可以格式化日期,你怎麼想。看看時間pkg docs

例如:

fmt.Println(t.Format("MST")) // outputs CST 

這裏是一個正在運行的example