作者:@daemon365
本文为作者原创,转载请注明出处:https://www.cnblogs.com/daemon365/p/15161682.html
时间类型
time.Time类型表示时间。
| func demo() { |
| now := time.Now() |
| fmt.Printf("Now:%v\n", now) |
| year := now.Year() |
| month := now.Month() |
| day := now.Day() |
| hour := now.Hour() |
| minute := now.Minute() |
| second := now.Second() |
| fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) |
| } |
时间戳
| func stamp() { |
| now := time.Now() |
| timestamp1 := now.Unix() |
| timestamp2 := now.UnixNano() |
| fmt.Printf("秒时间戳:%v\n", timestamp1) |
| fmt.Printf("纳秒时间戳:%v\n", timestamp2) |
| } |
使用time.Unix()函数可以将时间戳转为时间格式。
| func demo2(timestamp int64) { |
| timeObj := time.Unix(1462032000, 0) |
| fmt.Println(timeObj) |
| } |
时间格式化
时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分
| func demo4() { |
| now := time.Now() |
| fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan")) |
| fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan")) |
| fmt.Println(now.Format("2006*01*02")) |
| } |
解析字符串格式的时间
| |
| loc, err := time.LoadLocation("Asia/Shanghai") |
| if err != nil { |
| fmt.Println(err) |
| return |
| } |
| |
| timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2016/04/30 22:00:00", loc) |
| if err != nil { |
| fmt.Println(err) |
| return |
| } |
| fmt.Println(timeObj) |
| fmt.Println(timeObj.Unix()) |
时间操作
- func (t Time) Add(d Duration) Time加时间
- func (t Time) Sub(u Time) Duration减时间
- func (t Time) Before(u Time) bool在u之前
- func (t Time) After(u Time) bool在u之后
| package main |
| import ( |
| "fmt" |
| "time" |
| ) |
| func formatDemo() { |
| now := time.Now() |
| fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan")) |
| fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan")) |
| fmt.Println(now.Format("2006*01*02")) |
| } |
| func main() { |
| |
| loc, err := time.LoadLocation("Asia/Shanghai") |
| if err != nil { |
| fmt.Println(err) |
| return |
| } |
| |
| timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2016/04/30 22:00:00", loc) |
| if err != nil { |
| fmt.Println(err) |
| return |
| } |
| fmt.Println(timeObj) |
| |
| now := time.Now() |
| a := now.Add(time.Hour) |
| fmt.Println(a) |
| s := now.Sub(timeObj) |
| fmt.Println(s) |
| fmt.Println(now.Before(timeObj)) |
| fmt.Println(now.After(timeObj)) |
| } |
定时器
使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个channel
| func tickDemo() { |
| ticker := time.Tick(time.Second) |
| for i := range ticker { |
| fmt.Println(i) |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?