golang 的时间格式化操作
本文内容纲要:
-怎么做
-简而言之
-还可以
-为什么
-最后
怎么做
简而言之
time.Now().Format("2006-01-0215:04:05")
你将会获得如同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){
...
case'2'://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