go 常用标准库 时间函数
1.1 时间的解析和格式化
TIME_FMT := "2006-01-02 15:04:05"
now := time.Now()
ts := now.Format(TIME_FMT)
loc, _ = time.LoadLocation("Asia/Shanghai")
if t,err := time.ParseInLocation(TIME_FMT, ts, loc); err == nil {
fmt.Println(t.Day(),t.Hour(),t.Minute(),t.Second(),t.UnixMilli())
} else {
fmt.Println(err)
}
2.1 时间运算
diff1 := t1.Sub(t0)
diff2 := time.Since(t0)
diff3 := time.Duration(3 * time.Hour)
t4 := t0.Add(diff3)
t4.After(t0)
时间打印及时间计算
func main() {
now := time.Now()
fmt.Println(now.Hour(),now.Minute(),now.Second())
fmt.Println(now.Day()) //获取今天是这个月的第几天
fmt.Println(now.YearDay()) //获取今天是今天的第几天
fmt.Println(now.Unix()) //秒
fmt.Println(now.UnixMilli()) //毫秒
fmt.Println(now.UnixMicro())
fmt.Printf("%d\n",now.Weekday()) //获取今天是每周的第几天
fmt.Println(now.Weekday().String()) //获取今天是星期几,并转换成string
time.Sleep(3*time.Second) //原地等待三秒钟
t2 := time.Now() //再次获取当前时间t2
//计算t2与上面时间now的间隔,因为sleep了3秒,所以这里应该是3秒
dua := t2.Sub(now)
//计算当前时间与上面时间now的记那个,这里可能和dua查了几纳秒,几乎是一样的
dua2 := time.Since(now)
fmt.Println(dua)
fmt.Println(dua2)
//这里让最开始获取的时间加上sleep的那三秒,dua就是计算的sleep那三秒
t3 := now.Add(dua)
fmt.Println(t3) //t3=t2
}
3.1 时间的属性
t0.Unix(), t0.UnixMilli(), t0.UnixMicro(), t0.UnixNano()
t2.Year(), t2.Month(), t2.Day(), t2.YearDay()
t2.Weekday().String(), t2.Weekday()
t1.Hour(), t1.Minute(), t1.Second()
4.1 定时执行
tm := time.NewTimer(3 * time.Second)
<-tm.C
tm.Stop()
<-time.After(3 * time.Second)
5.1 周期执行
tk := time.NewTicker(1 * time.Second)
for i := 0; i < 10; i++ {
<-tk.C //阻塞1秒钟
//do something
}
tk.Stop()
代码整理
package main
import (
"fmt"
"time"
)
var (
loc *time.Location
)
const (
TIME_FMT = "2006-01-02 15:04:05"
DATE_FMT = "20060102"
)
func init() {
loc, _ = time.LoadLocation("Asia/Shanghai")
}
func basic() {
t0 := time.Now()
fmt.Printf("秒%d, 毫秒%d, 微秒%d, 纳秒%d\n", t0.Unix(), t0.UnixMilli(), t0.UnixMicro(), t0.UnixNano())
time.Sleep(2 * time.Second)
t1 := time.Now()
diff1 := t1.Sub(t0)
diff2 := time.Since(t0)
fmt.Printf("diff1=diff2 %t\n", int(diff1.Seconds()) == int(diff2.Seconds()))
fmt.Printf("t1>t0 %t\n", t1.After(t0))
d := time.Duration(3 * time.Hour)
t2 := t1.Add(d)
fmt.Printf("hour1 %d, hour2 %d\n", t1.Hour(), t2.Hour())
fmt.Printf("week day %s %d\n", t2.Weekday().String(), t2.Weekday())
fmt.Printf("year %d\n", t2.Year())
fmt.Printf("month %s %d %d\n", t2.Month(), t2.Month(), int(t2.Month()))
fmt.Printf("day %d\n", t2.Day())
fmt.Printf("day in year %d\n", t2.YearDay())
}
func parse_format() {
now := time.Now()
ts := now.Format(TIME_FMT)
fmt.Println("格式化时间", ts)
t, _ := time.Parse(TIME_FMT, ts)
if t.Unix() != now.Unix() {
fmt.Printf("Parse时间解析错误:%d!=%d\n", t.Unix(), now.Unix())
}
t, _ = time.ParseInLocation(TIME_FMT, ts, loc)
if t.Unix() != now.Unix() {
fmt.Printf("ParseInLocation时间解析错误:%s\n", t.Format(TIME_FMT))
}
}
func ticker() {
tk := time.NewTicker(1 * time.Second)
for i := 0; i < 10; i++ {
<-tk.C
fmt.Printf("现在时间是%s\n", time.Now().Format(TIME_FMT))
}
tk.Stop()
}
func timer() {
fmt.Printf("现在时间是%s\n", time.Now().Format(TIME_FMT))
tm := time.NewTimer(3 * time.Second)
<-tm.C
fmt.Printf("现在时间是%s\n", time.Now().Format(TIME_FMT))
tm.Stop()
fmt.Printf("现在时间是%s\n", time.Now().Format(TIME_FMT))
<-time.After(3 * time.Second)
fmt.Printf("现在时间是%s\n", time.Now().Format(TIME_FMT))
}
func main() {
basic()
fmt.Println()
parse_format()
fmt.Println()
ticker()
fmt.Println()
timer()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!