Go中time.RFC3339 時間格式化的實現
在開發過程中,我們有時會遇到這樣的問題,將 2020-11-08T08:18:46+08:00 轉成 2020-11-08 08:18:46,怎麼解決這個問題?
解決這個問題,最好不要用字符串截取,或者說字符串截取是最笨的方法,這應該是時間格式化的問題。
我們先看一下 golang time 包中支持的 format 格式:
const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone RFC3339 = "2006-01-02T15:04:05Z07:00" RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" Kitchen = "3:04PM" // Handy time stamps. Stamp = "Jan _2 15:04:05" StampMilli = "Jan _2 15:04:05.000" StampMicro = "Jan _2 15:04:05.000000" StampNano = "Jan _2 15:04:05.000000000" )
我們找到瞭 RFC3339 ,那就很簡單瞭,我們封裝一個方法 RFC3339ToCSTLayout,見下面代碼。
package timeutil import "time" var ( cst *time.Location ) // CSTLayout China Standard Time Layout const CSTLayout = "2006-01-02 15:04:05" func init() { var err error if cst, err = time.LoadLocation("Asia/Shanghai"); err != nil { panic(err) } } // RFC3339ToCSTLayout convert rfc3339 value to china standard time layout func RFC3339ToCSTLayout(value string) (string, error) { ts, err := time.Parse(time.RFC3339, value) if err != nil { return "", err } return ts.In(cst).Format(CSTLayout), nil }
運行一下
RFC3339Str := "2020-11-08T08:18:46+08:00" cst, err := timeutil.RFC3339ToCSTLayout(RFC3339Str) if err != nil { fmt.Println(err) } fmt.Println(cst)
輸出:
2020-11-08 08:18:46
小結
同理,若遇到 RFC3339Nano、RFC822、RFC1123 等格式,也可以使用類似的方法,隻需要在 time.Parse() 中指定時間格式即可。
到此這篇關於Go中time.RFC3339 時間格式化的實現的文章就介紹到這瞭,更多相關Go time.RFC3339 時間格式化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Go每日一庫之dateparse處理時間
- 一文帶你瞭解Go語言中time包的時間常用操作
- go語言中time包的各種函數總結
- go語言中的Carbon庫時間處理技巧
- Golang 中的json.Marshal問題總結(推薦)