怎么做

简而言之

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. 08-java学习-数组-增强for循环-数组与方法-main函数参数

    数组定义和使用 数组与方法的结合使用 main函数传参

  2. String系列-----AbstractStringBuilder

    1. AbstractStringBuilder是StringBuffer和StringBuilder的父类 package com.amazing.jdk.string_2017_12_31; im ...

  3. PHP使用Redis实现消息队列

    消息队列可以使用MySQL来实现,可以参考博客PHP使用MySQL实现消息队列,虽然用MySQL可以实现,但是一般不这么用,因为MySQL的数据都存在硬盘中,而从硬盘中对MySQL的操作,I/O花费的 ...

  4. Excel读写方案XLSReadWriteII使用技巧总结

    XLSReadWriteII是一个读写Excel的组件.他的一般已用只要按照Demo操作基本都能实现,只要不是非常复杂的应用,XLSReadWriteII还是能够胜任的. 最近被派了一个写入图库的应用 ...

  5. ubuntu安装steam

    增加第三方自由库的软件支持 sudo add-apt-repository multiverse 增加更新支持包 sudo add-apt-repository multiverse 安装steam ...

  6. java面向对象的核心思想

    java面向对象的特征之一:封装 1.封装性的使用 package edu.tongji.classdemo; /* 封装性 1.封装的目的:保护某些属性和方法不被外部所见 2.封装的实现 为属性和方 ...

  7. js break和continue

    break的兩種形式: break:未加標籤,適用於switch和循環結構 break labelname:適用於任何代碼塊: continue的兩種形式: continue:適用於循環結構 cont ...

  8. JDK8字符串拼接的正确姿势

    1. 对列表中的元素进行拼接 以前,对一个列表中的字符串进行拼接时,常见的代码如示例1所示: 代码示例1 List<String> ids = ImmutableList.of(" ...

  9. Enea推出Linux实时加速方案专门针对Xilinx UltraScale+

    导读 Enea(纳斯达克OMX Nordic:ENEA)Linux实时加速方案的扩展版本,完全集成了Xilinx UltraScale +系列的所有处理单元.借助Xilinx开发者大会(XDF)201 ...

  10. Python中正则表达式的巧妙使用

    字符串的匹配查询 re模块中的findall函数可以对指定的字符串进行遍历匹配,获取字符串中所有匹配的子串,并返回一个列表结果.该函数的参数含义如下: findall(pattern, string, ...