您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“golang如何設(shè)置時(shí)區(qū)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“golang如何設(shè)置時(shí)區(qū)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
golang設(shè)置時(shí)區(qū)的方法:1、固定時(shí)區(qū)到東八區(qū),設(shè)置代碼如“var cstZone = time.FixedZone("CST", 8*3600)”;2、加載指定時(shí)區(qū),設(shè)置代碼如“var cstSh, _ = time.LoadLocation("Asia/Shanghai")”。
時(shí)區(qū)的劃分
全球以英國倫敦格林威治作為零度經(jīng)線的起點(diǎn),每隔15經(jīng)度為一個(gè)時(shí)區(qū),15度經(jīng)線為該時(shí)區(qū)的中央經(jīng)線,共分為24個(gè)時(shí)區(qū)。由西向東每隔15經(jīng)度增加一個(gè)時(shí)區(qū),相反的,每向西15經(jīng)度減少一個(gè)時(shí)區(qū)。中國所在時(shí)區(qū)為東8區(qū)。
時(shí)間格式
當(dāng)前時(shí)間time.Now()返回的是當(dāng)?shù)貢r(shí)區(qū)的時(shí)間:
func main() {
t := time.Now()
fmt.Println(t) //2020-12-16 09:34:19.5828312 +0800 CST m=+0.004002201
}
CST時(shí)間
CST可以代表如下四個(gè)不同的時(shí)區(qū):
Central Standard Time (USA) UT-6:00:美國標(biāo)準(zhǔn)時(shí)間
Central Standard Time (Australia) UT+9:30:澳大利亞標(biāo)準(zhǔn)時(shí)間
China Standard Time UT+8:00:中國標(biāo)準(zhǔn)時(shí)間
Cuba Standard Time UT-4:00:古巴標(biāo)準(zhǔn)時(shí)間
time.Now()返回的 +0800 CST 表示的就是中國標(biāo)準(zhǔn)時(shí)間,與UTC時(shí)間有如下的轉(zhuǎn)化:
GMT + 8 = UTC + 8 = CST
Monotonic Clocks 和 Wall Clocks
Wall Clocks表示掛鐘時(shí)間,存儲(chǔ)的是自1970 年 1 月 1 日 0 時(shí) 0 分 0 秒以來的時(shí)間戳,當(dāng)系統(tǒng)和授時(shí)服務(wù)器進(jìn)行校準(zhǔn)時(shí)間時(shí)間操作時(shí),有可能造成這一秒是2018-1-1 00:00:00,而下一秒變成了2017-12-31 23:59:59的情況。
Monotonic Clocks,意思是單調(diào)時(shí)間的,所謂單調(diào),就是只會(huì)不停的往前增長,不受校時(shí)操作的影響,這個(gè)時(shí)間是自進(jìn)程啟動(dòng)以來的秒數(shù)。
time.Now()返回的m=+0.004002201就是表示Monotonic Clocks
時(shí)區(qū)設(shè)置
go語言中如果不設(shè)置指定的時(shí)區(qū),通過time.Now()獲取到的就是本地時(shí)區(qū)
func main() {
t := time.Now() //返回本地時(shí)區(qū)格式
fmt.Println(t)
}
設(shè)置時(shí)區(qū)有兩種方式:
固定時(shí)區(qū)(推薦使用)
var cstZone = time.FixedZone("CST", 8*3600) // 東八
fmt.Println(time.Now().In(cstZone).Format("2006-01-02 15:04:05"))
固定時(shí)區(qū)到東八區(qū)。但這種不是對(duì)程序的全局設(shè)置,每次獲取時(shí)都需要固定時(shí)區(qū)
加載時(shí)區(qū)
var cstSh, _ = time.LoadLocation("Asia/Shanghai") // 上海
fmt.Println(time.Now().In(cstSh).Format("2006-01-02 15:04:05"))
加載指定時(shí)區(qū)。但如果沒有g(shù)o環(huán)境使用這種方式就會(huì)加載失敗,因?yàn)闀r(shí)區(qū)信息是放在go的安裝包中的。
docker中配置時(shí)區(qū)
如果你用第二種方式加載時(shí)區(qū),在打docker鏡像時(shí)就需要進(jìn)行時(shí)區(qū)相關(guān)的配置,配置文件如下:
FROM golang:alpine as build
RUN apk --no-cache add tzdata //構(gòu)建階段加載時(shí)區(qū)
WORKDIR /app
ADD . /app
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp
FROM scratch as final
COPY --from=build /app/myapp .
### 下面這行是新加的,復(fù)制時(shí)區(qū)相關(guān)的信息到最終鏡像中,否則程序會(huì)找不到改時(shí)區(qū)
COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo
ENV TZ=Asia/Shanghai //在最終階段設(shè)置時(shí)區(qū)環(huán)境變量
CMD ["/myapp"]
讀到這里,這篇“golang如何設(shè)置時(shí)區(qū)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。