格式化日期
要在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"
)
所有的日期格式化字符串
日期格式
年份格式
| 转到布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| 2006 | YYYY | "2022" | 四位数的年份 |
| 06 | YY | "22" | 两位数的年份 |
月的格式
| 转到布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| 一月 | MMMM | "July" | 全月名称 |
| 一月 | MMM | "Jul" | 月份的三个字母缩写 |
| 01 | MM | "07" | 两位数的月份(如有必要,可在前面加一个0) |
| 1 | M | "7" | 最多两位数的月份(没有前导0)。 |
日格式
| 去布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| 礼拜一 | DDDD | "Tuesday" | 完整的工作日名称 |
| 星期一 | DDD | "Tue" | 平日的三个字母缩写 |
| 02 | DD | "08" | 两位数的月日(如有必要,可在前面加一个0) |
| _2 | _D | " 8" | 两位数的月日,如有必要,可在前面加一个空格 |
| 2 | D | "8" | 最多两位数的月日(没有前导0)。 |
| 002 | ddd | "074" | 三位数的年月日(如有必要,带前导0)。 |
| __2 | __d | " 74" | 三位数的年月日,如有必要,可在前面加一个空格 |
时间格式
小时格式
| 转动布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| 15 | hh | "17" | 两位数的24h格式小时 |
| 03 | hh | "05" | 两位数的12h格式小时(如有必要,可加上前导0) |
| 3 | h | "5" | 最多两位数的12h格式的小时(没有前导0)。 |
| 下午 | 上午/下午 | "AM" | AM/PM标记(大写)。 |
| pm | am/pm | "am" | AM/PM标记(小写) |
分钟格式
| 转动布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| 04 | 毫米 | "07" | 两位数的分钟(如有必要,可加上前导0)。 |
| 4 | m | "7" | 最多两位数的分钟(没有前导0)。 |
秒的格式
| 去布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| 05 | ss | "09" | 两位数的秒(如有必要,可在前面加一个0) |
| 5 | s | "9" | 最多两位数的秒(没有前导0)。 |
| .0,.00, ...,.000000000 | .s | ".126284000" | 一个小数的秒(包括尾部的0) |
| .9,.99, ...,.999999999 | .s | ".126284" | 一个小数点的秒(省略尾数零)。 |
时区格式
时区格式
| 转动布局 | 格式 | 例子 | 说明 |
|---|---|---|---|
| MST | TTT | "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" | 带有小时的数字时区偏移 |
| Z070000 | Z或±hhmmss | "+010000" | 与-070000类似,但打印"Z" ,而不是"+000000" ,用于UTC区(ISO 8601行为)。 |
| Z07:00:00 | Z或±hh:mm:ss | "+01:00:00" | 与-07:00:00类似,但打印"Z" ,而不是UTC区的"+00:00:00" (ISO 8601行为)。 |
| Z0700 | Z或±hhmm | "+0100" | 与-0700相同,但打印"Z" ,而不是UTC区的"+0000" (ISO 8601行为)。 |
| Z07:00 | Z或±hh:mm | "+01:00" | 与-07:00类似,但打印"Z" ,而不是UTC区的"+00:00" (ISO 8601行为)。 |
| Z07 | Z或±hh | "+01" | 与-07类似,但打印"Z" ,而不是UTC区的"+00" (ISO 8601行为)。 |