你将会获得如同yyyy-MM-ddhh-mm-ss这样的输出。
在format.go的源码中我们可以找到一些预定的格式,源码摘抄如下:
const( ANSIC="MonJan_215:04:052006" UnixDate="MonJan_215:04:05MST2006" RubyDate="MonJan0215:04:05-07002006" RFC822="02Jan0615:04MST" RFC822Z="02Jan0615:04-0700"//RFC822withnumericzone RFC850="Monday,02-Jan-0615:04:05MST" RFC1123="Mon,02Jan200615:04:05MST" RFC1123Z="Mon,02Jan200615:04:05-0700"//RFC1123withnumericzone RFC3339="2006-01-02T15:04:05Z07:00" RFC3339Nano="2006-01-02T15:04:05.999999999Z07:00" Kitchen="3:04PM" //Handytimestamps. Stamp="Jan_215:04:05" StampMilli="Jan_215:04:05.000" StampMicro="Jan_215:04:05.000000" StampNano="Jan_215:04:05.000000000" )我们可以直接使用time.Time对象的format函数,将以上预定的格式当作参数,来得到格式化后的时间字符串。
除了预定义的格式,我们也可以按照上述格式的规则自定义格式化字符串,就如同上一节“简而言之”中描述的那样。
golang的时间格式化并不像C#那样使用yyyy表示年份、MM表示月份等等。
而是使用2006-01-0215:04:05这样具有固定数字的格式化字符串。
你要问我为什么使用这样看起来奇怪的格式化字符串?抱歉,我真的猜不透。
下面的代码摘自golang源代码关于时间格式化的部分
//Stringreturnsthetimeformattedusingtheformatstring // "2006-01-0215:04:05.999999999-0700MST" func(tTime)String()string{ returnt.Format("2006-01-0215:04:05.999999999-0700MST") }可以看到,golang中并没有使用英文单词首字母表示的格式化字符串,而是使用了一组固定的数据。
在format.go中第140行左右的地方,可以找到下面这个函数。
此函数用来判断格式化字符串中的格式化内容。在其源代码中,我们可以清晰地看到,golang使用了硬编码来对格式化字符串进行判断。
//nextStdChunkfindsthefirstoccurrenceofastdstringin //layoutandreturnsthetextbefore,thestdstring,andthetextafter. funcnextStdChunk(layoutstring)(prefixstring,stdint,suffixstring){ ... case2://2006,2 iflen(layout)>=i+4&&layout[i:i+4]=="2006"{ returnlayout[0:i],stdLongYear,layout[i+4:] } returnlayout[0:i],stdDay,layout[i+1:] case_://_2,_2006 iflen(layout)>=i+2&&layout[i+1]==2{ //_2006isreallyaliteral_,followedbystdLongYear iflen(layout)>=i+5&&layout[i+1:i+5]=="2006"{ returnlayout[0:i+1],stdLongYear,layout[i+5:] } returnlayout[0:i],stdUnderDay,layout[i+2:] } ... }(由于该函数行数比较多,所以只摘抄部分,如果有兴趣研究,请移步format.go源代码)
我暂时不知道golang为何使用这样的格式化字符串,但是既然这样设计了,我们就应该如此使用。
本文内容总结:怎么做,简而言之,还可以,为什么,最后,
原文链接:https://www.cnblogs.com/chr-wonder/p/7385483.html