时间类型

time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。

  1. func main() {
  2. now := time.Now()
  3. fmt.Println(now)
  4. fmt.Println(now.Year())
  5. fmt.Println(now.Month())
  6. fmt.Println(now.Day())
  7. fmt.Println(now.Hour())
  8. fmt.Println(now.Minute())
  9. fmt.Println(now.Second())
  10. fmt.Printf("%#v\n",now)
  11. //时间戳
  12. fmt.Println(now.Unix())
  13. tm := now.Unix()
  14. timestamp2Timeobj(tm)
  15. //定时器
  16. tickTest01()
  17. }

时间戳

时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间(UnixTimestamp)。

  1. func timestampDemo() {
  2. now := time.Now() //获取当前时间
  3. timestamp1 := now.Unix() //时间戳
  4. timestamp2 := now.UnixNano() //纳秒时间戳
  5. fmt.Printf("current timestamp1:%v\n", timestamp1)
  6. fmt.Printf("current timestamp2:%v\n", timestamp2)
  7. }

定时器

使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)。

  1. func timestamp2Timeobj(timestamp int64) {
  2. time1 := time.Unix(timestamp,0)
  3. year := time1.Year()
  4. month := time1.Month()
  5. day := time1.Day()
  6. hour := time1.Hour()
  7. minute := time1.Minute()
  8. second := time1.Second()
  9. fmt.Printf("%04d-%02d-%02d %02d:%02d:%02d\n",year,month,day,hour,minute,second)
  10. }
  11. //定时器
  12. func tickTest01() {
  13. ticker := time.Tick(time.Second)
  14. for range ticker {
  15. timestamp2Timeobj(time.Now().Unix()) //每秒执行的任务
  16. }
  17. }

时间格式化

时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)。

  1. //yyyy-m-d 其他语言
  2. //2006-01-02 15:04:05 go
  3. func formattest01() {
  4. now := time.Now()
  5. fmt.Println(now.Format("2006-01-02 15:04:05"))
  6. fmt.Println(now.Format("2006/01/02 15:04:05"))
  7. fmt.Println(now.Format("15:04 2006/01/02"))
  8. fmt.Println(now.Format("2006/01/02"))
  9. }

time.Since

time.Since用于评估与实际时间的差异,内部调用了Sub函数,Since返回从t开始经过的时间

  1. start := time.Now() // 获取当前时间
  2. sum := 0
  3. for i := 0; i <10; i++ {
  4. sum += 1
  5. }
  6. end := time.Since(start)
  7. fmt.Printf("耗费了%s",end)
  8. 耗费了12.5447ms

time.Sleep

go中time.Sleep 不能传入数字来实现延时,而是传入 time.Duration

  1. 睡眠1小时105秒:
  2. time.Sleep(1*time.Hour + 10*time.Minute + 5*time.Second)