01/Jan | 02 | 03/15 | 04 | 05 | 06 | -07[00][:00] | PM | Mon |
---|---|---|---|---|---|---|---|---|
月 | 日 | 時 | 分 | 秒 | 年 | 時差 | 上下午 | 星期幾 |
也就是1234567,分別對應(yīng):月日時分秒年 時差,很好記憶。只是稍微注意一下:
也許是因為06對應(yīng)的“年”與go的項目啟動時間差不多,也就有了網(wǎng)上的誤傳。在源代碼time/time.go中,有非常明確的描述,粘貼一下,就不翻譯了:
// These are predefined layouts for use in Time.Format and Time.Parse.
// The reference time used in the layouts is the specific time:
// Mon Jan 2 15:04:05 MST 2006
// which is Unix time 1136239445. Since MST is GMT-0700,
// the reference time can be thought of as
// 01/02 03:04:05PM ‘06 -0700
雖然go已經(jīng)提供了10多個常用格式:
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" )
但個人習慣還是“2006-01-02 15:04:05 Mon”,之前代碼稍加修改,就是這樣:
formate:="2006-01-02 15:04:05 Mon" now := time.Now() local1, err1 := time.LoadLocation("UTC") //輸入?yún)?shù)"UTC",等同于"" if err1 != nil { fmt.Println(err1) } local2, err2 := time.LoadLocation("Local") if err2 != nil { fmt.Println(err2) } local3, err3 := time.LoadLocation("America/Los_Angeles") if err3 != nil { fmt.Println(err3) } fmt.Println(now.In(local1).Format(formate)) fmt.Println(now.In(local2).Format(formate)) fmt.Println(now.In(local3).Format(formate)) //output: //2016-12-04 08:06:39 Sun //2016-12-04 16:06:39 Sun //2016-12-04 00:06:39 Sun
時間初始化
除了最常用的time.Now,go還提供了通過unix標準時間、字符串兩種方式來初始化:
//通過字符串,默認UTC時區(qū)初始化Time func Parse(layout, value string) (Time, error) //通過字符串,指定時區(qū)來初始化Time func ParseInLocation(layout, value string, loc *Location) (Time, error) //通過unix 標準時間初始化Time func Unix(sec int64, nsec int64) Time
時間初始化的時候,一定要注意原始輸入值的時區(qū)。正好手里有一個變量,洛杉磯當?shù)貢r間“2016-11-28 19:36:25”,unix時間精確到秒為1480390585。將其解析出來的代碼如下:
local, _ := time.LoadLocation("America/Los_Angeles") timeFormat := "2006-01-02 15:04:05" //func Unix(sec int64, nsec int64) Time { time1 := time.Unix(1480390585, 0) //通過unix標準時間的秒,納秒設(shè)置時間 time2, _ := time.ParseInLocation(timeFormat, "2016-11-28 19:36:25", local) //洛杉磯時間 fmt.Println(time1.In(local).Format(timeFormat)) fmt.Println(time2.In(local).Format(timeFormat)) chinaLocal, _ := time.LoadLocation("Local")//運行時,該服務(wù)器必須設(shè)置為中國時區(qū),否則最好是采用"Asia/Chongqing"之類具體的參數(shù)。 fmt.Println(time2.In(chinaLocal).Format(timeFormat)) //output: //2016-11-28 19:36:25 //2016-11-28 19:36:25 //2016-11-29 11:36:25
當然,如果輸入值是字符串,且?guī)в袝r區(qū)
“2016-12-04 15:39:06 +0800 CST”
則不需要采用ParseInLocation方法,直接使用Parse即可。
當然,其他time包中的函數(shù)還有很多,但網(wǎng)上已經(jīng)有很多描述,就不再啰嗦。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。