Go語言的時間格式風格詳解
time package
go 的time package 提供了time.Format函數,用來對時間進行格式化輸出。
類似的還有time.Parse用來解析字符串類型的時間到time.Time。這是兩個互逆的函數。
問題是,go 采用的格式化 layout 和我們以往所用的任何經驗都不同。以至于初次接觸總是一頭霧 水。
其實 go 提供的這個 layout 對算法的實現非常科學高效,而且很規律。下面我們詳細分解下。
直接上個對應表
前面是含義,后面是 go 的表示值,多種表示,逗號","分割
- 月份 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,Monday
您看出規律了么!哦是的,你發現了,這里面沒有一個是重復的,所有的值表示都唯一對應一個時間部分。并且涵蓋了很多格式組合。
比如小時的表示(原定義是下午3時,也就是15時)
- 3 用12小時制表示,去掉前導0
- 03 用12小時制表示,保留前導0
- 15 用24小時制表示,保留前導0
- 03pm 用24小時制am/pm表示上下午表示,保留前導0
- 3pm 用24小時制am/pm表示上下午表示,去掉前導0
又比如月份
- 1 數字表示月份,去掉前導0
- 01 數字表示月份,保留前導0
- Jan 縮寫單詞表示月份
- January 全單詞表示月份
實例對應
真實時間:我的UTC時間是 2013年12月5日,我的本地時區是Asia
字符表示: 2013 12 5 Asia
Go Layout: 2006 01 2 MST
真實時間:我的UTC時間是 2013年12月22點,我的本地時區是Asia
字符表示: 2013 12 22 Asia
Go Layout: 2006 01 15 MST
是滴,上面這個時間是合法的,雖然沒有說是那一天,但是說了小時
而所有這些數字的順序正好是1,2,4,5,6,7和一個時區MST
其實還有一個秒的 repeated digits for fractional seconds 表示法
用的是 0和9 ,很少用,源代碼里面是這樣寫的
stdFracSecond0 // ".0", ".00", ... , trailing zeros included stdFracSecond9 // ".9", ".99", ..., trailing zeros omitted
那些分界符
除了那些值之外的都是分界符號,自然匹配了,直接舉例子吧
字符表示: 2013-12 21 Asia
Go Layout: 2006-01 15 MST
字符表示: 2013年12月21時 時區Asia
Go Layout: 2006年01月15時 時區MST
好了,您是否感覺這個表示方法兼容度更好,適應性更強呢,更容易記憶呢。