Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn)
在開(kāi)發(fā)過(guò)程中,我們有時(shí)會(huì)遇到這樣的問(wèn)題,將 2020-11-08T08:18:46+08:00 轉(zhuǎn)成 2020-11-08 08:18:46,怎么解決這個(gè)問(wèn)題?
解決這個(gè)問(wèn)題,最好不要用字符串截取,或者說(shuō)字符串截取是最笨的方法,這應(yīng)該是時(shí)間格式化的問(wèn)題。
我們先看一下 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 ,那就很簡(jiǎn)單了,我們封裝一個(gè)方法 RFC3339ToCSTLayout,見(jiàn)下面代碼。
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
}
運(yùn)行一下
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
小結(jié)
同理,若遇到 RFC3339Nano、RFC822、RFC1123 等格式,也可以使用類似的方法,只需要在 time.Parse() 中指定時(shí)間格式即可。
到此這篇關(guān)于Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Go time.RFC3339 時(shí)間格式化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?chassis云原生微服務(wù)開(kāi)發(fā)框架應(yīng)用編程實(shí)戰(zhàn)
這篇文章主要為大家介紹了Go?chassis云原生微服務(wù)開(kāi)發(fā)框架應(yīng)用編程實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Go 微服務(wù)開(kāi)發(fā)框架DMicro設(shè)計(jì)思路詳解
這篇文章主要為大家介紹了Go 微服務(wù)開(kāi)發(fā)框架DMicro設(shè)計(jì)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Golang實(shí)現(xiàn)for循環(huán)運(yùn)行超時(shí)后自動(dòng)退出的方法
for循環(huán)對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生,對(duì)于golang來(lái)說(shuō)更是必不可少,所以下面這篇文章就來(lái)給大家介紹了關(guān)于Golang如何實(shí)現(xiàn)for循環(huán)運(yùn)行一段時(shí)間超時(shí)后自動(dòng)退出的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
一文弄懂用Go實(shí)現(xiàn)MCP服務(wù)的示例代碼
本文主要介紹了一文弄懂用Go實(shí)現(xiàn)MCP服務(wù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Go使用XORM操作MySQL的陷阱盤(pán)點(diǎn)分析
在?Go?語(yǔ)言開(kāi)發(fā)中,大家為了方便,通常會(huì)選擇使用?ORM?操作數(shù)據(jù)庫(kù),比如使用?XORM?或?GORM?操作?MySQL,本文我們來(lái)介紹一下使用?XORM[3]?操作?MySQL?可能會(huì)遇到的陷阱2023-11-11
使用Go語(yǔ)言編寫(xiě)一個(gè)NTP服務(wù)器的流程步驟
NTP服務(wù)器【Network?Time?Protocol(NTP)】是用來(lái)使計(jì)算機(jī)時(shí)間同步化的一種協(xié)議,為了確保封閉局域網(wǎng)內(nèi)多個(gè)服務(wù)器的時(shí)間同步,我們計(jì)劃部署一個(gè)網(wǎng)絡(luò)時(shí)間同步服務(wù)器(NTP服務(wù)器),本文給大家介紹了使用Go語(yǔ)言編寫(xiě)一個(gè)NTP服務(wù)器的流程步驟,需要的朋友可以參考下2024-11-11
Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn)
本文主要介紹了Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Golang實(shí)現(xiàn)簡(jiǎn)易的命令行功能
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Golang實(shí)現(xiàn)一個(gè)簡(jiǎn)易的命令行功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2023-02-02
golang敏感詞過(guò)濾的實(shí)現(xiàn)
本文主要介紹了golang敏感詞過(guò)濾的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

