golang package time的用法具体详解

2020-01-28 13:08:50于丽

to time stamp


func (t Time) Unix() int64
 func (t Time) UnixNano() int64

 fmt.Println(time.Now().Unix())

 // 获取指定日期的时间戳
 dt, _ := time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")
 fmt.Println(dt.Unix())

 fmt.Println(time.Date(2018, 1,2,15,30,10,0, time.Local).Unix())

其他

time 包还提供了一些常用的方法,基本覆盖了大多数业务,从方法名就能知道代表的含义就不一一说明了。


func (t Time) Date() (year int, month Month, day int)
 func (t Time) Clock() (hour, min, sec int)
 func (t Time) Year() int
 func (t Time) Month() Month
 func (t Time) Day() int
 func (t Time) Hour() int
 func (t Time) Minute() int
 func (t Time) Second() int
 func (t Time) Nanosecond() int
 func (t Time) YearDay() int
 func (t Time) Weekday() Weekday
 func (t Time) ISOWeek() (year, week int)
 func (t Time) IsZero() bool
 func (t Time) Local() Time
 func (t Time) Location() *Location
 func (t Time) Zone() (name string, offset int)
 func (t Time) Unix() int64

时间段(Duartion)

介绍完了时间点,我们再来介绍时间段,即 Duartion 类型, 我们业务也是很常用的类型。


// func ParseDuration(s string) (Duration, error)
 tp, _ := time.ParseDuration("1.5s")
 fmt.Println(tp.Truncate(1000), tp.Seconds(), tp.Nanoseconds())

 func (d Duration) Hours() float64
 func (d Duration) Minutes() float64
 func (d Duration) Seconds() float64
 func (d Duration) Nanoseconds() int64
 func (d Duration) Round(m Duration) Duration  // 四舍五入
 func (d Duration) Truncate(m Duration) Duration // 向下取整

时区(Location)

我们在来介绍一下时区的相关的函数


// 默认UTC 
 loc, err := time.LoadLocation("") 
 // 服务器设定的时区,一般为CST
 loc, err := time.LoadLocation("Local")
 // 美国洛杉矶PDT
 loc, err := time.LoadLocation("America/Los_Angeles")

 // 获取指定时区的时间点
 local, _ := time.LoadLocation("America/Los_Angeles")
 fmt.Println(time.Date(2018,1,1,12,0,0,0, local))

可以在 $GOROOT/lib/time/zoneinfo.zip 文件下看到所有时区。

时间运算

好了,基础的类型我们介绍完,现在开始时间运算相关的函数,也是日常业务中我们大量应用的。


// func Sleep(d Duration) 休眠多少时间,休眠时处于阻塞状态,后续程序无法执行
 time.Sleep(time.Duration(10) * time.Second)

 // func After(d Duration) <-chan Time 非阻塞,可用于延迟
 time.After(time.Duration(10) * time.Second)

 // func Since(t Time) Duration 两个时间点的间隔
 start := time.Now()
 fmt.Println(time.Since(start)) // 等价于 Now().Sub(t), 可用来计算一段业务的消耗时间

 func Until(t Time) Duration // 等价于 t.Sub(Now()),t与当前时间的间隔

 // func (t Time) Add(d Duration) Time
 fmt.Println(dt.Add(time.Duration(10) * time.Second)) // 加

 func (t Time) Sub(u Time) Duration   // 减 

 // func (t Time) AddDate(years int, months int, days int) Time
 fmt.Println(dt.AddDate(1, 1, 1))

 // func (t Time) Before(u Time) bool
 // func (t Time) After(u Time) bool
 // func (t Time) Equal(u Time) bool  比较时间点时尽量使用Equal函数