首页 文章资讯内容详情

golang 的时间格式化操作

2026-06-01 5 花语

本文内容纲要:

-怎么做 -简而言之 -还可以 -为什么 -最后

怎么做

简而言之

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){ ... 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