基本时间格式示例
Go不使用yyyy-mm-dd布局来格式化或解析时间。而是格式化一个特殊的布局参数
Mon Jan 2 15:04:05 MST 2006
与格式化时间或日期的方式相同。(这个日期在写成时更容易记住01/02 03:04:05PM ‘06 -0700。)
const (
layoutISO = "2006-01-02"
layoutUS = "January 2, 2006"
)
date := "1999-12-31"
t, _ := time.Parse(layoutISO, date)
fmt.Println(t) // 1999-12-31 00:00:00 +0000 UTC
fmt.Println(t.Format(layoutUS)) // December 31, 1999
函数
- time.Parse 解析日期字符串
- Format格式化 time.Time。
他们有以下用法:
func Parse(layout, value string) (Time, error)
func (t Time) Format(layout string) string
常见的时间和日期布局
Layout | Note |
---|---|
January 2, 2006 01/02/06 Jan-02-06 | Date |
15:04:05 3:04:05 PM | Time |
Jan _2 15:04:05 Jan _2 15:04:05.000000 | Timestamp with microseconds |
2006-01-02T15:04:05-0700 2006-01-02 15:04:05 | ISO 8601 (RFC 3339) |
02 Jan 06 15:04 MST 02 Jan 06 15:04 -0700 | RFC 822 with numeric zone |
预定义的日期和时间戳布局
还可以使用以下预定义格式常量。
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”
RFC850 =“星期一,02-Jan-06 15:04:05 MST”
RFC1123 =“星期一,2006年1月2日15:04:05 MST”
RFC1123Z =“星期一,2006年1月2日15:04:05 -0700”
RFC3339 =“2006-01-02T15:04:05Z07:00”
RFC3339Nano =“2006-01-02T15:04:05.999999999Z07:00”
厨房=“下午3:04”
//便利的时间戳。
邮票=“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”
所有layout选项
Type | Options |
---|---|
Year Month Day Weekday | 06 2006 01 1 Jan January 02 2 _2 (width two, right justified) Mon Monday |
Hours Minutes Seconds ms μs ns ms μs ns | 03 3 15 04 4 05 5 .000 .000000 .000000000 .999 .999999 .999999999 (trailing zeros removed) |
am/pm | PM pm |
Timezone Offset | MST -0700 -07 -07:00 Z0700 Z07:00 |
小案例
在24小时时间格式中,不可能指定在没有前缀零的情况下渲染一个小时。
不可能指定午夜为24:00,得用00:00。一个典型的用法是使用开区间时间在午夜结束,例如07:00-24:00。(译者注:使用24:00会报错hour out of range)
无法指定包含闰秒(leap second)的时间:23:59:60。实际上,时间包假设没有闰秒的公历。
翻译:https://yourbasic.org/golang/format-parse-string-time-date-example/