Go語言的時間格式風格詳解

jopen 11年前發布 | 36K 次閱讀 Go語言 Google Go/Golang開發

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

好了,您是否感覺這個表示方法兼容度更好,適應性更強呢,更容易記憶呢。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!