其它编程语言的开发者,在第一次应用 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 这种形式用了……