Go 日期时间相关函数
在编程中,我们经常会使用到日期相关的函数,比如:统计某段代码执行花费的时间。
日期相关的操作函数都在 time
包下
time.Time
在 Go 中,有一个 time.Time
类型,用于表示时间
var dt time.Time = time.Now()
fmt.Println(dt) // 2023-05-15 20:24:38.562418 +0800 CST m=+0.000108054
fmt.Println(dt.Year()) // 2023
fmt.Println(dt.Month()) // May
fmt.Println(dt.Day()) // 15
fmt.Println(dt.Hour()) // 20
fmt.Println(dt.Minute()) // 31
fmt.Println(dt.Second()) // 59
dt.Month
默认返回的是英文,可以通过类型转换将他转成对应的数字。
fmt.Println(int(dt.Month())) // 5
时间格式化
格式化日期的一种方式,注意 Go 的答辩设计...不能使用传统的 yyyyMMdd
这种方式进行格式化。
var dt time.Time = time.Now()
fmt.Println(dt.Format("2006/01/02 15:04 56")) // 2023/05/15 20:43 206
fmt.Println(dt.Format("2006-01-02 15:04 56")) // 2023-05-15 20:43 206
时间常量 Duration
常量的作用在于获取指定时间单位的时间,例如我要获取两个小时是多少秒,在之前我们需要通过 2 * 60 * 60
,现在我们可以直接通过这个常量进行计算就可以了:
fmt.Println((2 * time.Hour).Seconds()) // 7200
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
休眠
在 time
包中有一个 Sleep
函数,他可以阻塞当前线程休眠指定的时间,这个方法类似于 java 中的 Thread.sleep()
方法。
for i := 0; i < 100; i++ {
fmt.Print(i, "%\r")
time.Sleep(time.Second)
}
Unix 时间戳
获取但前 unix 时间戳 和 unixnano 时间戳。
通过 time.Now().Unix()
函数获取从 1970 年 1 月 1 日到现在的时间,单位是秒
var dt time.Time = time.Now()
fmt.Println(dt.Unix()) // 1684156990
而 time.Now().UnixNano()
函数是从 1970 年 1 月 1 日到现在的纳秒
var dt time.Time = time.Now()
fmt.Println(dt.UnixNano()) // 1684157036232992000