Golang的 time format


Golang的 time format

问题描述

我们在使用golang格式化时间时,如果写成如下的参数
fmt.Println(time.Now().Format( "2007年03月" ))

程序会输出下面的结果

    若改成下列参数:
fmt.Println(time.Now().Format( "2006年01月" ))

程序会输出如下我们预想的结果:

    其实更标准的参数如下:
fmt.Println(time.Now().Format( "2006-01-02 15:04:05" ))
在别的文档中有人开玩笑说这个可能是golang的诞生日期,虽然时间上确实比较接近吧。   下图为2007 年 9 月 25 号罗布·派克(Rob Pike)给肯·汤普逊(Ken Thompson) 的有关新的编程语言讨论主题的邮件,邮件大意为:在开车回家的路上我得到了些灵感,给这门编程语言取名为“go”。 以上两个大佬和罗伯特·格瑞史莫(Robert Griesemer)都是golang的作者。一直到了 2009 年,Go 正式开源了。Go 项目团队将 2009 年 11 月 10 日,即该语言正式对外开源的日字作为其官方生日。      以上只是大家的一个玩笑,其实当我们仔细观察就会发现,其实这个时间排列一下就是  北美山地时间(MST:Mountain Standard Time)2006年1月2日下午(PM)3点4分5秒  
fmt.Println(now.Format( "01/02 03:04:05PM '06 -0700" ))
1,2,3,4,5,6,7
或者
fmt.Println(time.Now().Format( "2006-01-02 15:04:05" ))
6,1,2,3,4,5,
  依次对应:(括号内的形式均可,PM大小写均可,月份只能首字母大写,顺序不限,但他们之间必须要有空格、"-"、"|"等形式的分割符)

我们可以把下列图表中的数字和上面位置进行对应。

时间 支持形式 对应数字
一月 (Jan)(January)(1)(01) 1
二日 (2)(02) 2
下午三点 (15)(03 PM)(3 PM)(3)(3 pm)(03 pm) 3
四分 (4)(04) 4
五秒 (5)(05) 5
六年 (2006)(006)(06) 6
七时区 (MST)(mst)(-07)(-070)(-0700)(-07:00) 7
  下边是演示的代码和程序输出的结果,大家可以参考使用。  
package main

import (
   "fmt"
   "time"
)

func main() {
   now := time.Now()
   nowStr := now.Format( "01/02 03:04:05PM '06 -0700" )
   fmt.Println(nowStr)
   nowStr = now.Format( "2006-January-02 03:04:05.999 pm" )
   fmt.Println(nowStr)
   nowStr = now.Format( "2006-Jan-02 03:04:05.999 pm" )
   fmt.Println(nowStr)
   nowStr = now.Format( "06-Jan-02 03:04:05.999 pm" )
   fmt.Println(nowStr)
   nowStr = now.Format( "006-Jan-02 03:04:05.999 pm" )
   fmt.Println(nowStr)
   nowStr = now.Format( "006-Jan-02 03:04:05.999 pm MST" )
   fmt.Println(nowStr)
   nowStr = now.Format( "006-Jan-02 03:04:05.999 pm -07" )
   fmt.Println(nowStr)
   nowStr = now.Format( "006-Jan-02 03:04:05.999 pm -070" )
   fmt.Println(nowStr)
   nowStr = now.Format( "006-Jan-02 03:04:05.999 pm mst" )
   fmt.Println(nowStr)
   nowStr = now.Format( "006-Jan-02 03:04:05.999 pm -07:00" )
   fmt.Println(nowStr)
}