其它程式語言的開發者,在第一次使用Go的時間格式化方法時一定會一臉懵逼,為什麼不是我熟悉的yyyy、MM、dd,而是一個特殊的年、月、日數字呢?
首先看一下正確的使用方法
// 程式碼
s := time.Now().Format("2006-01-02 15:04:05.999999")
fmt.Printf("%s\n", s)
// 結果(正確)
2022-06-14 23:21:48.655781
如果後面的時間隨便輸入呢?(其實我是複製上面的輸出結果)
// 程式碼
s := time.Now().Format("2022-06-14 23:21:48.655781")
fmt.Printf("%s\n", s)
// 結果(出乎意料)
141414-22-627 1411:146:278.61818786
既然必須得按人家的規範來,那我們如何方便快速得記住這段神奇的數字呢?
官方的文件和原始碼中有這麼一記錄:
// These are predefined layouts for use in Time.Format and time.Parse.
// The reference time used in these layouts is the specific time stamp:
// 01/02 03:04:05PM '06 -0700
其實就是1月2日3點(下午)4分5秒6年-7時區(崔健:一二三四五六七呀……)
我們日常習慣都是年月日,給記憶帶來了一丟丟麻煩,不管時區的話就是:612345。
記住了嗎?寫幾個試試唄?
// 程式碼
s := time.Now().Format("2006年01月02日 15時04分05秒999毫秒")
fmt.Printf("%s\n", s)
// 輸出(發現了嗎?除了毫秒都正確!)
2022年06月14日 23時46分45秒999毫秒
// 經過測試,發現毫秒前面必須有:,或者.,使用9或者0都可以
time.Now().Format("2006年01月02日 15時04分05秒.000毫秒")
// 程式碼(整個奇怪的形狀,月日時秒不補0)
s := time.Now().Format("2006/1/2 3:04:5")
fmt.Printf("%s\n", s)
// 輸出
2022/6/14 11:53:2
各種細節還是得看文件:
// Year: "2006" "06"
// Month: "Jan" "January"
// Textual day of the week: "Mon" "Monday"
// Numeric day of the month: "2" "_2" "02"
// Numeric day of the year: "__2" "002"
// Hour: "15" "3" "03" (PM or AM)
// Minute: "4" "04"
// Second: "5" "05"
// AM/PM mark: "PM"
看了這麼多,你學廢了嗎?如果還不會用,那就自己封裝一個yyyyMMdd自己習慣的方式吧,Go純粹就是把2006、01、02這些數字當成了yyyMMdd這種方式用了……