🕰️Go中的日期和时间格式介绍及实例

159 阅读5分钟

格式化日期

要在Go中格式化一个日期,请使用 time.Format()的方法 Time结构的方法。

package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Println(t.Format(time.RFC3339))
}

解析日期

要在Go中解析日期,请使用结构中的 time.Parse()函数,该函数来自 time包中的函数。

package main
import (
"fmt"
"log"
"time"
)
// date time format layout
const YYYYMMDD = "2006-01-02"
func main() {
s := "2022-03-23"
t, err := time.Parse(YYYYMMDD, s)
if err != nil {
log.Fatal(err)
}
fmt.Println(t)
}

解析带有时区的日期

time.Parse()将时间解释为UTC。要解析一个特定地点的时间,使用 time.ParseInLocation()函数。

package main
import (
"fmt"
"log"
"time"
)
func main() {
s := "2022-03-23T07:00:00+01:00"
loc, _ := time.LoadLocation("Europe/Berlin")
t, err := time.ParseInLocation(time.RFC3339, s, loc)
if err != nil {
log.Fatal(err)
}
fmt.Println(t)
}

参考布局

要格式化或解析一个日期,你需要指定输入或输出的日期字符串的布局。Go语言使用一种特定的日期布局格式,其中日期的每一部分都有一个序号索引。

"01/02 03:04:05PM '06 -0700"

  • 01- 月
  • 02- 日
  • 03- 小时(12h)
  • 04- 分钟
  • 05- 秒
  • 06- 年
  • 07- 时区偏移

有用的日期和时间布局

一些布局,没有定义在 time包中定义的,在日常编码中很有用。

const (
// YYYY-MM-DD: 2022-03-23
 YYYYMMDD = "2006-01-02"
// 24h hh:mm:ss: 14:23:20
 HHMMSS24h = "15:04:05"
// 12h hh:mm:ss: 2:23:20 PM
 HHMMSS12h = "3:04:05 PM"
// text date: March 23, 2022
 TextDate = "January 2, 2006"
// text date with weekday: Wednesday, March 23, 2022
 TextDateWithWeekday = "Monday, January 2, 2006"
// abbreviated text date: Mar 23 Wed
 AbbrTextDate = "Jan 2 Mon"
)

预定义的布局

内置的时间/日期布局定义在 time包中定义的。

const (
Layout = "01/02 03:04:05PM '06 -0700" // The reference time, in numerical order.
 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"
)

所有的日期格式化字符串

日期格式

年份格式

转到布局格式例子说明
2006YYYY"2022"四位数的年份
06YY"22"两位数的年份

月的格式

转到布局格式例子说明
一月MMMM"July"全月名称
一月MMM"Jul"月份的三个字母缩写
01MM"07"两位数的月份(如有必要,可在前面加一个0)
1M"7"最多两位数的月份(没有前导0)。

日格式

去布局格式例子说明
礼拜一DDDD"Tuesday"完整的工作日名称
星期一DDD"Tue"平日的三个字母缩写
02DD"08"两位数的月日(如有必要,可在前面加一个0)
_2_D" 8"两位数的月日,如有必要,可在前面加一个空格
2D"8"最多两位数的月日(没有前导0)。
002ddd"074"三位数的年月日(如有必要,带前导0)。
__2__d" 74"三位数的年月日,如有必要,可在前面加一个空格

时间格式

小时格式

转动布局格式例子说明
15hh"17"两位数的24h格式小时
03hh"05"两位数的12h格式小时(如有必要,可加上前导0)
3h"5"最多两位数的12h格式的小时(没有前导0)。
下午上午/下午"AM"AM/PM标记(大写)。
pmam/pm"am"AM/PM标记(小写)

分钟格式

转动布局格式例子说明
04毫米"07"两位数的分钟(如有必要,可加上前导0)。
4m"7"最多两位数的分钟(没有前导0)。

秒的格式

去布局格式例子说明
05ss"09"两位数的秒(如有必要,可在前面加一个0)
5s"9"最多两位数的秒(没有前导0)。
.0,.00, ...,.000000000.s".126284000"一个小数的秒(包括尾部的0)
.9,.99, ...,.999999999.s".126284"一个小数点的秒(省略尾数零)。

时区格式

时区格式

转动布局格式例子说明
MSTTTT"CEST"时区的缩略语
-070000±hhmmss"+010000"带有小时、分钟和秒的数字时区偏移量
-07:00:00±hh:mm:ss"+01:00:00"用冒号分隔的小时、分钟和秒的数字时区偏移量
-0700±hhmm"+0100"带有小时和分钟的数字时区偏差
-07:00±hh:mm"+01:00"数值时区偏移,小时和分钟用冒号隔开
-07±hh"+01"带有小时的数字时区偏移
Z070000Z或±hhmmss"+010000"与-070000类似,但打印"Z" ,而不是"+000000" ,用于UTC区(ISO 8601行为)。
Z07:00:00Z或±hh:mm:ss"+01:00:00"与-07:00:00类似,但打印"Z" ,而不是UTC区的"+00:00:00" (ISO 8601行为)。
Z0700Z或±hhmm"+0100"与-0700相同,但打印"Z" ,而不是UTC区的"+0000" (ISO 8601行为)。
Z07:00Z或±hh:mm"+01:00"与-07:00类似,但打印"Z" ,而不是UTC区的"+00:00" (ISO 8601行为)。
Z07Z或±hh"+01"与-07类似,但打印"Z" ,而不是UTC区的"+00" (ISO 8601行为)。