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