time包
时间类型 time.Time
- 时间戳 time.Now.Unix() 1970.1.1到现在
时间间隔类型 time.Duration
package time
import (
"fmt"
"testing"
"time"
)
func TestTime(t *testing.T) {
now := time.Now()
fmt.Println(now)
fmt.Println(now.Year())
fmt.Println(now.Month())
fmt.Println(now.Day())
fmt.Println(now.Date())
fmt.Println(now.Hour())
fmt.Println(now.Minute())
fmt.Println(now.Second())
}
// 时间戳
func TestTimeStamp(t *testing.T) {
now := time.Now()
fmt.Println(now.Unix())
fmt.Println(now.UnixNano())
//time.Unix()转换时间戳
res := time.Unix(1264803667, 0)
fmt.Println(res.Year())
fmt.Println(res.Date())
}
// 时间操作
func TestTimeFunction(t *testing.T) {
now := time.Now()
// +24h
fmt.Println(now.Add(24 * time.Hour))
ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器
for i := range ticker {
fmt.Println(i) //每秒都会执行的任务
}
}
// 时间格式化
func TestTimeFormat(t *testing.T) {
now := time.Now()
//格式化的模板为Go的出生时间2006年1月2号15点04分 2006 1 2 3 4
//24小时制
fmt.Println(now.Format("2006-01-02 15:04:05"))
fmt.Println(now.Format("2006/01/02 15:04:05"))
fmt.Println(now.Format("2006/01/02"))
fmt.Println(now.Format("15:04:05"))
//12小时制
fmt.Println(now.Format("2006-01-02 03:04:05 PM"))
fmt.Println(now.Format("2006/01/02 03:04:05 PM"))
fmt.Println(now.Format("2006/01/02 1 2 3"))
fmt.Println(now.Format("03:04:05 PM"))
}
// 按照对应的格式解析字符串格式的时间
func TestParseTime(t *testing.T) {
timeStr := "2020-11-25 15:04:05"
timeObj, err := time.Parse("2006-01-02 15:04:05", timeStr)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(timeObj)
}
// Sub()函数计算两个时间的差值
func TestSub(t *testing.T) {
now := time.Now()
// 两个时间相减
// 24小时
fmt.Println(now.Sub(now.Add(24 * time.Hour)))
// 1小时
fmt.Println(now.Sub(now.Add(1 * time.Hour)))
// 1分钟
fmt.Println(now.Sub(now.Add(1 * time.Minute)))
// 1秒
fmt.Println(now.Sub(now.Add(1 * time.Second)))
}
// 时区
func TestTimeZone(t *testing.T) {
// 1.获取本地时区
loc, err := time.LoadLocation("Local")
if err != nil {
fmt.Println(err)
return
}
// 2.获取本地时间
now := time.Now().In(loc)
fmt.Println("本地时间:", now)
// 3.获取UTC时间
utc := time.Now().UTC()
fmt.Println("UTC时间:", utc)
// 4.按照指定时区获取时间
// 4.1获取东八区时区
loc1, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("东八区时间:", now.In(loc1))
// 4.2获取东九区时区
loc2, err := time.LoadLocation("Asia/Tokyo")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("东九区时间:", now.In(loc2))
fmt.Println("东八区当前时间减东九区当前时间", time.Now().In(loc1).Sub(time.Now().In(loc2))) //结果为0,因为Sub在计算时会将时区转换为UTC
// 5.按照指定时区格式化时间
timeObj, err := time.ParseInLocation("2006-01-02 15:04:05", "2022-12-16 21:26:05", loc2)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("当前时间用东九区格式化与当前时间相减", timeObj.Sub(time.Now())) //结果为1h
}