怎么做

简而言之

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. 【转】STM32和ARM的区别

    转自:http://www.cnblogs.com/nuc-boy/archive/2012/09/11/2680157.html 这个问题大概2009年的时候很多人就在问,请看09年的时候大家给出的 ...

  2. [系统软件]Ubuntu 18.04中的Shutter禁用了“编辑”选项解决

    本文引用自linux公社, 原文请点击 : https://www.linuxidc.com/Linux/2018-04/151911.htm   在Ubuntu 18.04中安装了我最喜欢的截图工具 ...

  3. 运用PDO存储将图片、音频文件存入数据库

    在数据库中创建表格的时候,有一个字段为image,用来保存图片,那么其类型就是blob,关于blob,百度百科是这样描述的 BLOB (binary large object),二进制大对象,是一个可 ...

  4. HDU 2043 密码

    http://acm.hdu.edu.cn/showproblem.php?pid=2043 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-" ...

  5. 归并排序详解(python实现)

    因为上个星期leetcode的一道题(Median of Two Sorted Arrays)所以想仔细了解一下归并排序的实现. 还是先阐述一下排序思路: 首先归并排序使用了二分法,归根到底的思想还是 ...

  6. html 腳本

    腳本引入: <script type="text/script"> document.write("hello")</script> 腳 ...

  7. python之发送HTML内容的邮件

    # 发送html内容的邮件 import smtplib, time, os from email.mime.text import MIMEText from email.header import ...

  8. java面试题整理(3)

    1.Spring有哪些优点? 轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB. 控制反转(IOC):Spring使用控制反转技术实现了松耦合.依赖被注 ...

  9. MT【227】换钱的总数

    (2012复旦)将1张面值100元的人民币全部换成面值1角,2角,5角的人民币,不同的换法有多少种? 解:即求不等式$2x+5y\le1000$的所有非负整数解的个数.由匹克公式:$S=a+\dfra ...

  10. 数据挖掘(二)用python实现数据探索:汇总统计和可视化

    今天我们来讲一讲有关数据探索的问题.其实这个概念还蛮容易理解的,就是我们刚拿到数据之后对数据进行的一个探索的过程,旨在了解数据的属性与分布,发现数据一些明显的规律,这样的话一方面有助于我们进行数据预处 ...