golang2006-01-02T15:04:05Z07:00time.RFC3339
	RFC3339     = "2006-01-02T15:04:05Z07:00"

golang 中关于时间的处理, 用到了上面的 每一个 数字和字母。

需要特别注意的是, 时区用的是 7 而非 6 , 因为 6 已经在 年(2006) 中出现了

time.Time
// 1. 创建当前时间对象
	now := time.Now()

// 2. 通过各个字段创建时间对象
	t1 := time.Date(2019, time.November, 17, 11, 0, 0, 0, time.UTC)

// 3. 通过 time.Parse 解析字符串创建时间对象
	FORMAT = `2006-01-02T15:04:05Z`
	timeStr := `2019-11-23T15:23:31Z`
	t, err := time.Parse(FORMAT, timeStr)
time.Parse()

时间操作

获取时间对象的属性值

t.XXX()XXX
	now := time.Now() // 2021-08-25T
	
	now.Year()    // 2021  年
	now.Month()   // August int(xxx)
	now.Day()     // 25

	now.YearDay() // 237
	now.Date()    // 2021 August 25

// ...
now.Month()Monthtype Month intintint(Month)now.YearDay()now.Date()

时间对象转字符串

t.String()
t.String()FORMATt.Format()
now.String() // 2021-08-25 22:15:47.467594 +0800 CST m=+0.000505982
t.Format()
t.Format(FOMART)FOMART
t.Format(time.RFC1123)  // time.RFC1123 :  Wed, 25 Aug 2021 22:15:47 CST
t.Format(time.RFC822Z)  // time.RFC822Z :  25 Aug 21 22:15 +0800
t.Format(time.RFC3339)  // time.RFC3339 :  2021-08-25T22:15:47+08:00
t.MarshalXXX() ([]byte,error)
t.MarshalText()t.MarshalJSONRFC3339MarshalJSON
	now := time.Now()

	b, _ := now.MarshalJSON()
	fmt.Printf("%s\n", b)   // "2021-08-25T22:27:49.009467+08:00"


	b2, _ := now.MarshalText()
	fmt.Printf("%s\n", b2)  // 2021-08-25T22:27:49.009467+08:00

时间对象比较

t.Before(), t.After(), t.Equal()
t1, _ := time.Parse("2006-01-02T15:04:05Z", "2021-09-20T10:12:30")
t2, _ := time.Parse("2006-01-02T15:04:05Z", "2021-08-20T10:12:30")

fmt.Println(t1.After(t2))  // false
fmt.Println(t1.Equal(t1))  // true

时间偏移

t.Sub()time.Durationt.Add()time.Durationtime.Time

time.Duration 可以为 正数 和 负数 。

t.AddDate()
	t1 := time.Now() // 2021-08-25 ...

	time.Sleep(time.Second * 1)
	t2 := time.Now()

	d1 := t1.Sub(t2)
	fmt.Println(d1.Seconds())  // -1.003566082

	t3 := t2.Add(-24 * time.Hour)  
	fmt.Println(t3)  // 2021-08-24 ...

	t4 := t2.AddDate(-1, -1, -1)
	fmt.Println(t4)   // 2020-07-24 ...