go--time 模块

time 模块

获取当前的时间和月份

package main

import (
   "fmt"
   "time"
)

func main() {
   t := time.Now() // 获取当前时间
   fmt.Println(t)
   fmt.Println(t.Date())             // 获取日期
   fmt.Println(t.Year())             // 获取年份
   fmt.Println(t.Month())            // 获取月份
   fmt.Println(t.Day())              // 获取日
   fmt.Println(t.Hour())             // 获取小时
   fmt.Println(t.Minute())           // 获取分钟
   fmt.Println(t.Second())           // 获取秒
   fmt.Println(t.UnixMilli())        // 毫秒
   fmt.Println(t.UnixMicro())        // 微秒
   fmt.Println(t.UnixNano())         // 纳秒
   fmt.Println(t.Weekday())          // 返回当前日期是星期几,类型是 time.WeekDay
   fmt.Println(t.Weekday().String()) // 返回当前日期是星期几,类型是字符串
   fmt.Println(t.YearDay())          // 返回当前日期在今年的第几天

   // 需要注意的是t.Weekday() 返回的是 time.WeekDay类型, 而不是字符串
   // 如果想要变成字符串 可以使用 t.Weekday().String()

}

结果

2022-12-15 17:02:29.522366 +0800 CST m=+0.000063272
2022 December 15
2022
December
15
17
2
29
1671094949522
1671094949522366
1671094949522366000
Thursday
Thursday
349

计算时间差

计算时间差我们可以使用 Sub 或者 time.Since() 来获取

package main

import (
   "fmt"
   "time"
)

func main() {
   t1 := time.Now() // 获取当前时间
   time.Sleep(2 * time.Second)
   t2 := time.Now() // 获取当前时间

   d1 := t2.Sub(t1)               // 计算 t2 跟 t1 的时间差,返回类型是 time.Duration
   fmt.Println(d1)                // 默认是秒
   fmt.Println(d1.Microseconds()) //也可以取微秒

   d2 := time.Since(t1) // 等价于上面的 Sub,会自动获取当前时间减去 t1
   fmt.Println(d2)      // 默认是秒,也可以取其他的单位

}

结果

2.003652994s
2003652
2.003733078s

时间的格式化

有时候我们想获取当前的时间,就可以使用 time.Now().Format 来获取了

package main

import (
   "fmt"
   "time"
)

func main() {
   TimeFmt := "2006-01-02 15:04:05" // 必须为这个时间,其中的空格、-、: 可以换成你想要的格式,但时间不能换
   now := time.Now()
   fmt.Println(now) // 2022-12-15 16:36:11.868534 +0800 CST m=+0.000058206

   ts := time.Now().Format(TimeFmt)
   fmt.Println(ts) // 2022-12-15 16:36:11
}

结果

2022-12-15 16:36:11.868534 +0800 CST m=+0.000058206
2022-12-15 16:36:11

设置时区

时区可以通过 time.LoadLocation() 来进行设置

package main

import (
   "fmt"
   "time"
)

func main() {
   TimeFmt := "2006-01-02 15:04:05" // 必须为这个时间,其中的空格、-、: 可以换成你想要的格式,但时间不能换
   now := time.Now()
   fmt.Println(now) // 2022-12-15 16:39:04.932655 +0800 CST m=+0.000144887

   ts := time.Now().Format(TimeFmt)
   fmt.Println(ts) // 2022-12-15 16:39:04

   loc, _ := time.LoadLocation("Asia/Shanghai")   // 设置时区为上海
   t, _ := time.ParseInLocation(TimeFmt, ts, loc) // 第一个参数是格式化,第二个是要格式化的时间,第三个是时区
   fmt.Println(t)                                 // 2022-12-15 16:39:04 +0800 CST
}

时间的加减 Add 和 AddDate

package main

import (
   "fmt"
   "time"
)

func main() {
   t := time.Now() // 获取当前时间
   fmt.Println("当前时间为:", t)
   fmt.Println("十分钟后的时间为:", t.Add(time.Minute*10))  //time.Minute 为一分钟,乘以 10 就是 10 分钟
   fmt.Println("十分钟前的时间为:", t.Add(time.Minute*-10)) // 乘以 -10
   fmt.Println("一天后的时间为:", t.Add(time.Hour*24))     // time.Hour 为 1 小时

   /* 使用 AddDate */
   // AddDate 有三个参数,分别是 年、月、日
   fmt.Println("一年两个月三天后的时间为:", t.AddDate(1, 2, 3))

}

结果

当前时间为: 2022-05-04 14:01:38.303554 +0800 CST m=+0.000174644
十分钟后的时间为: 2022-05-04 14:11:38.303554 +0800 CST m=+600.000174644
十分钟前的时间为: 2022-05-04 13:51:38.303554 +0800 CST m=-599.999825356
一天后的时间为: 2022-05-05 14:01:38.303554 +0800 CST m=+86400.000174644
一年两个月三天后的时间为: 2023-07-07 14:01:38.303554 +0800 CST

字符串于 time.Time 的转换

package main

import (
   "fmt"
   "reflect"
   "time"
)

func main() {
   t := time.Now() // 获取当前时间,类型为 time.Time
    
   fmt.Println("t 的类型为:", reflect.TypeOf(t))
   fmt.Println("当前时间为:", t)
   utcTime := t.Format(time.RFC3339)
   fmt.Println("utcTime 的类型为:", reflect.TypeOf(utcTime))
   fmt.Println(utcTime) // 转为标准时间字符串
    
   // 标准时间字符串,转为 time.Time 类型
   newTime, err := time.Parse(time.RFC3339, utcTime) // 解析有可能出错
   if err != nil {
      fmt.Println("解析错误:", err)
   } else {
      fmt.Println(newTime)
      fmt.Println("newTime 的类型为:", reflect.TypeOf(newTime))
   }
   
}

结果

t 的类型为: time.Time
当前时间为: 2022-05-04 14:15:22.967382 +0800 CST m=+0.000193253
utcTime 的类型为: string
2022-05-04T14:15:22+08:00
2022-05-04 14:15:22 +0800 CST
newTime 的类型为: time.Time

 

posted @ 2024-03-26 11:59  邹邹很busy。  阅读(32)  评论(0编辑  收藏  举报