怎么做

简而言之

time.Now().Format("2006-01-02 15:04:05")

你将会获得如同 yyyy-MM-dd hh-mm-ss 这样的输出。

还可以

format.go 的源码中我们可以找到一些预定的格式,源码摘抄如下:

const (
   ANSIC = "Mon Jan _2 15:04:05 2006"
   UnixDate = "Mon Jan _2 15:04:05 MST 2006"
   RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
   RFC822 = "02 Jan 06 15:04 MST"
   RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
   RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
   RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
   RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
   RFC3339 = "2006-01-02T15:04:05Z07:00"
   RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
   Kitchen = "3:04PM"
   // Handy time stamps.
   Stamp = "Jan _2 15:04:05"
   StampMilli = "Jan _2 15:04:05.000"
   StampMicro = "Jan _2 15:04:05.000000"
   StampNano = "Jan _2 15:04:05.000000000"
)

我们可以直接使用 time.Time 对象的 format 函数,将以上预定的格式当作参数,来得到格式化后的时间字符串。

除了预定义的格式,我们也可以按照上述格式的规则自定义格式化字符串,就如同上一节 “简而言之” 中描述的那样。

为什么

golang的时间格式化并不像C#那样使用 yyyy 表示年份、MM 表示月份等等。

而是使用 2006-01-02 15:04:05 这样具有固定数字的格式化字符串。

你要问我为什么使用这样看起来奇怪的格式化字符串?抱歉,我真的猜不透。

下面的代码摘自golang源代码 关于时间格式化的部分

// String returns the time formatted using the format string
// "2006-01-02 15:04:05.999999999 -0700 MST"
func (t Time) String() string {
   return t.Format("2006-01-02 15:04:05.999999999 -0700 MST")
}

可以看到,golang中并没有使用英文单词首字母表示的格式化字符串,而是使用了一组固定的数据。

format.go 中第140行左右的地方,可以找到下面这个函数。

此函数用来判断格式化字符串中的格式化内容。在其源代码中,我们可以清晰地看到, golang 使用了硬编码来对格式化字符串进行判断。

// nextStdChunk finds the first occurrence of a std string in
// layout and returns the text before, the std string, and the text after.
func nextStdChunk(layout string) (prefix string, std int, suffix string) {
...
case '2': // 2006, 2
   if len(layout) >= i+4 && layout[i:i+4] == "2006" {
   return layout[0:i], stdLongYear, layout[i+4:]
   }
   return layout[0:i], stdDay, layout[i+1:]
  
   case '_': // _2, _2006
   if len(layout) >= i+2 && layout[i+1] == '2' {
   //_2006 is really a literal _, followed by stdLongYear
   if len(layout) >= i+5 && layout[i+1:i+5] == "2006" {
   return layout[0 : i+1], stdLongYear, layout[i+5:]
   }
   return layout[0:i], stdUnderDay, layout[i+2:]
   } ...
}

(由于该函数行数比较多,所以只摘抄部分,如果有兴趣研究,请移步 format.go 源代码 )

最后

我暂时不知道 golang 为何使用这样的格式化字符串,但是既然这样设计了,我们就应该如此使用。

golang 的时间格式化操作的更多相关文章

  1. golang 格式化时间成datetime

    Golang或者Beego,总需要往数据库里写datetime时间戳. Golang对时间格式支持并不理想. 先看一个例子: package main import ( "fmt" ...

  2. Golang的时间生成,格式化,以及获取函数执行时间的方法

    最近都在通过完成一些列功能强化自己对常用api的熟悉. 然而关于时间的api几乎是最常用的api类型,所以总结一些常用的. 以YY-mm-dd HH:MM:SS.9位 输出当前时间: func mai ...

  3. golang日期时间格式format()

    format()函数格式化字符串,用了语句time.now().format(“2015-11-12 12:00:00”),结果输出结果就是不能达到理想的结果,然后把golang文档中的”2006-0 ...

  4. easyUi datagrid 返回时间格式化操作

    1.格式化返回的时间 { field : 'endTime', title : '轮播图片循环的结束时间', width : 50, align : 'center' //格式化时间操作 format ...

  5. golang 格式化时间为字符串

    package main import ( "fmt" "reflect" "time" ) func main() { //格式化字符串为 ...

  6. golang 日期时间处理

    package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) //显示时 ...

  7. Golang之时间格式化,计时器

    地鼠敲下一堆代码,记录着当天的时间 package main import ( "fmt" "time" ) func getTime() { now := t ...

  8. Golang之时间、日期类型

    孤身只影的一直小地鼠,艰难的走在路上 package main import ( "fmt" "time" ) //获取时间的格式 func testTime( ...

  9. golang 时间戳 时间格式化 获取当前时间 timestamp 计算时间差

    获取当前时间 func Now func Now() Time 1 Now returns the current local time. func (Time) UTC func (t Time) ...

随机推荐

  1. Windows 7 64位安装cURL

    安装cURL. 1, 下载64位的SSL版cURL,网址: http://curl.download.nextag.com/download/curl-7.21.7-win64-ssl-sspi.zi ...

  2. Apache的Thrift引发的编译思考

    最近偶然看到了Apache的Thrift,感觉有点像Corba架构后的变种(赞一个,Facebook真伟大).WSDL能生成C#和Java的(SOAP标准接口,做WebService都用过).Corb ...

  3. Ping命令的另一种使用方法

    今天实习结束休息的时候无聊,于是便想看看机房有多少机器,IP是什么,有没有什么小漏洞. 依次使用了netstat.ping.Telnet以后,不小心输入了这样一个东西 当时按下回车以后,心里想的是这样 ...

  4. Wordpress 更新时 不输入ftp相关信息的方法

    From 百度知道 我自己机器上面的处理过程为: cd /usr/share/nginx/html vim wp-config.php 在配置文件里面插入这三行 define("FS_MET ...

  5. Jquery 组 tbale表格滚动条

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  6. linux学习之centos(三):mysql数据库的安装和配置

    前言:mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库, ...

  7. Lodop打印设计(PRINT_DESIGN)里的快捷键

    Lodop打印控件,给开发人员提供了可视化编辑工具,编辑后可生成代码,然后复制到自己程序代码中,让开发更简单,打印设计中有一些快捷键也能让开发更便捷. 打印设计快捷键:ctrl 多个选中Shift 左 ...

  8. ZJOI2019 Day1游记

    退役吧垃圾 考的再烂还是要把自己捡起来 如果不想让自己的OI生涯就到这里止步的话 就给我滚去拿剩下的300分吧 浙江省前十六,学校前五,day1比别人差一百多分.如果这样还能进省队的话,我就成为传说了 ...

  9. linux需要你的不懈努力

    自己二十几年的求学生涯,总结出:天赋固然重要,但是最为重要的还是要有一个持之以恒的心,而且还要有科学的学习方法,不只是针对今天的主题linux,无论我们从事什么行业这都是不变的法则. 刚刚从一个稚嫩的 ...

  10. MT【72】一个不等式

    证明: 评: 可以思考$\frac{1}{(1+b)^2}+\frac{1}{(1+a)^2}$与$\frac{2}{(1+\sqrt{ab})^2}$大小.