Golang标准库学习 - Time
hanpy

time包提供了时间和日历的相关的函数与方法

主要类型

  1. Location:代表一个地区,并表示该地区所在的时区(可能多个)
  2. Time:代表一个纳秒精度的时间点,是公历时间。
  3. Duration:代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约 290 年。
  4. Timer 和 Ticker
  5. Weekday 和 Month

当前时间操作

方法 描述
func Now() Time Now返回当前本地时间。
func (t Time) Unix() int64 返回一个时间戳
func (t Time) Format(layout string) string Format根据layout指定的格式返回t代表的时间点的格式化文本表示
2006-01-02 15:04:05
1
2
3
4
5
6
7
8
9
10
11
12
// 1. 获取当前时间
now := time.Now()

// 2. 当前时间时间戳
timestamp := now.Unix()
fmt.Println(timestamp)

// 3. 当前时间格式化
nowDate := now.Format("2006-01-02 15:04:05")
fmt.Println(nowDate)
fmt.Printf("year:%v\n", now.Format("2006"))
fmt.Printf("Hour:%v\n", now.Format("15"))

时间转换

方法 描述
func Unix(sec int64, nsec int64) Time Unix创建一个本地时间,对应sec和nsec表示的Unix时间
func Parse(layout, value string) (Time, error) 解析一个格式化的时间字符串并返回它代表的时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 1. 时间戳转时间
var tt int64 = 1671524861
unix := time.Unix(tt, 0)
fmt.Println(unix.Format("2006-01-02 15:04:05"))

// 2. 时间戳转时间(字符串)
s := "1671524861"
sInt64, _ := strconv.ParseInt(s, 10, 64)
timeUnix := time.Unix(sInt64, 0)
fmt.Println(timeUnix.Format("2006-01-02 15:04:05"))

// 3. 时间格式转Time
dates := "2022-12-04 12:01:02"
parseTime, _ := time.Parse("2006-01-02 15:04:05", dates)
fmt.Println(parseTime.Format("2006-01-02 15:04:05"))

时间比较

方法 描述
func (t Time) Equal(u Time) bool 判断时间是否相同,会考虑时区和地区
func (t Time) Before(u Time) bool t代表的时间点在u之前,返回真;否则返回假
func (t Time) After(u Time) bool t代表的时间点在u之后,返回真;否则返回假。
1
2
3
4
5
6
d1 := "2022-12-03 12:01:02"
d2 := "2022-12-04 12:01:02"
d1Time, _ := time.Parse("2006-01-02 15:04:05", d1)
d2Time, _ := time.Parse("2006-01-02 15:04:05", d2)
fmt.Println(d1Time.Before(d2Time)) // true
fmt.Println(d1Time.After(d2Time)) // false

其他常用方法

方法 描述
func (t Time) Date() (year int, month Month, day int) 回时间点t对应的年、月、日
func (t Time) Clock() (hour, min, sec int) 返回t对应的那一天的时、分、秒。
func (t Time) Year() int 返回时间点t对应的年份。
func (t Time) Month() Month 返回时间点t对应那一年的第几月。
func (t Time) Day() int 返回时间点t对应那一月的第几日。
func (t Time) YearDay() int 返回时间点t对应的那一年的第几天,平年的返回值范围[1,365],闰年[1,366]。
func (t Time) Weekday() Weekday 返回时间点t对应的那一周的周几。
func (t Time) Hour() int 返回t对应的那一天的第几小时,范围[0, 23]。
func (t Time) Minute() int 返回t对应的那一小时的第几分种,范围[0, 59]。
func (t Time) Second() int 返回t对应的那一分钟的第几秒,范围[0, 59]。