
來源頭條作者:楊同學編程Unix 時間戳首先, unix 時間戳的單位是秒, 表示從美東時間(UTC) 的 1970 年 1 月 1號的 0點 到現在,經過的秒數。 因為 Unix 時間的定義中,已經明確了使用美東時間,所以我們在使用的時候,不用指定 unix 時間戳所在的地區。UTC 和 CST 時間格式對于中國的程序員來說,在初始 utc 和 cst 時間上,可能需要做一些額外操作。首先, cst 時間比 utc 時間快 8 小時,一般來說 CST = UTC + 8Unix 轉 時間格式默認時區/ 本地時區在 golang 語言體系中,如果不指定時區,則默認使用系統指定的時區? root@dnvim ~/.config/nvim master date
Sat Jan 1 05:36:28 UTC 2022通過date 命令,可以查看 linux 系統的時區是什么,可以看到我測試的機器上用的 UTC 時區在寫一個簡單的單元測試,看下 time.Time 數據結構輸出格式// 從 unix 時間 轉換成固定時間格式
func TestTime1(t *testing.T) {
ts := time.Now().Unix()
tm := time.Unix(ts, 0)
log.Printf("tm=%+v", tm)
}=== RUN TestTime1
2022/01/01 05:18:12 tm=2022-01-01 05:18:12 +0000 UTC
--- PASS: TestTime1 (0.00s)
PASS
[Process exited 0]我在執行測試文件的時候,是北京時間(CST) 的 13:18 , 但是程序顯示為 05:18 (UTC)如果我們直接將這個時間輸出出來,對于國內用戶來說,會比較難以理解(畢竟輸出的時間和北京時間無法對齊)指定時區在 golang 中,可以指定的時區有這些,這些文件可以在$GOROOT/lib/time/zoneinfo.zip 中找到,解壓zoneinfo.zip可以得到一堆目錄和文件,我們只需要目錄和文件的名字,時區名格式是目錄名/文件名從上述文件中,我們可以找到, 北京時間的格式為Asia/Shanghai 和Asia/Chongqing,代碼中指定CST如下func TestTime2(t *testing.T) {
ts := time.Now().Unix()
loc, _ := time.LoadLocation("Asia/Shanghai")
tm := time.Unix(ts, 0).In(loc)
log.Printf("tm=%+v", tm)
}=== RUN TestTime2
2022/01/01 05:54:29 tm=2022-01-01 13:54:29 +0800 CST
--- PASS: TestTime2 (0.00s)
PASS
[Process exited 0]可以看到指定輸出為 CST 格式指定格式當然,我們可能不滿足于只能輸出固定格式的時間字符串,比如想輸出2022年01月01日,05時54分 這樣的格式,可以怎么做呢。golang 提供了一個模板,可以讓我們自定義輸出格式。數據占位符月份1, 01, Jan, January日2, 02, _2時3,03,15,PM,pm,AM,am分4,04秒5,05年06,2006時區-07,-0700,Z0700,Z07:00,-07:00,MST周幾Mon,Mondayfunc TestTime3(t *testing.T) {
ts := time.Now().Unix()
loc, _ := time.LoadLocation("Asia/Shanghai")
tm := time.Unix(ts, 0).In(loc).Format("2006 年 01 月 02 日, 15時 04 分")
log.Printf("tm=%+v", tm)
}=== RUN TestTime3
2022/01/01 06:04:36 tm=2022 年 01 月 01 日, 14時 04 分
--- PASS: TestTime3 (0.00s)
PASS
[Process exited 0]可以看到, golang 已經按照輸出我們預期的格式了這里需要注意的是,2016.01.0215:04:05 應該嚴格按照golang 指定的占位符來使用,不能自己用其他時間表示 年、月、日、時、分、秒、周幾比如下面的代碼,會得到非預期的結果func TestTime4(t *testing.T) {
ts := time.Now().Unix()
loc, _ := time.LoadLocation("Asia/Shanghai")
tm := time.Unix(ts, 0).In(loc).Format("2006 年 01 月 02 日, 10時 04 分")
log.Printf("tm=%+v", tm)
}=== RUN TestTime4
2022/01/01 06:07:27 tm=2022 年 01 月 01 日, 10時 07 分
--- PASS: TestTime4 (0.00s)
PASS
[Process exited 0]
暫時沒有評論,來搶沙發吧~