其它编程语言的开发者,在第一次使用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这种方式用了……
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。