2.19 Go之time包:时间和日期
time包简介
-
时间值
-
时区
这一点在Go
语言的time
包源码当中可以看出
正确表示时间
国内使用的北京时间与UTC
时间的关系:
UTC + 8个小时 = 北京时间
Go
的time
包下的时区变量:
-
time.UTC
:UTC
时间 -
time.Local
:本地时间
Go
获取时区变量的函数:
-
LoadLocation
-
FixedZone
LoadLocation
:
FixedZone(name string, offset int) *Location
FixedZone
:
LoadLocation(name string) (*Location, error)
参数name
为时区的名字
时间的获取Practice
获取当前时间:
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
now := time.Now()
// 序列化输出结果
fmt.Printf("当前时间为:%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)
}
获取时间戳(时间戳是指自1970年1月1日(08:00:00GMT)
至当前时间的总毫秒数,它也被称为Unix
时间戳(UnixTimestamp
)):
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间时间戳
now := time.Now()
// 时间戳
timeStamp1 := now.Unix()
// 纳秒时间戳
timestamp2 := now.UnixNano()
// 现在的时间戳
fmt.Printf("现在的时间戳: %v\n", timeStamp1)
// 现在的纳秒时间戳
fmt.Printf("现在的纳秒时间戳: %v\n", timestamp2)
}
获取今天是星期几:
time
包中的Weekday
函数能够返回某个时间点所对应是一周中的周几:
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
t := time.Now()
u := t.Unix()
// 打印当前时间
fmt.Println(u)
// 使用time包提供的函数判断当前时间戳是周几
fmt.Println(t.Weekday().String())
}
时间操作函数
Add
Sub
Equal
Before
After
Add
求某个时间+时间间隔的函数:
func (t Time) Add(d Duration) Time
/*
返回t + 时间间隔d的值
*/
示例代码:
package main
import (
"fmt"
"time"
)
/*
调用time包下的函数求时间的加法
*/
func main() {
now := time.Now()
// 调用time包下的add函数求出一小时后的时间
later := now.Add(time.Hour)
// 打印结果
fmt.Println(later)
}
Sub
求两个时间的差值:
/*
返回一个时间段 t - u 的值。如果结果超出了 Duration 可以表示的最大值或最小值,将返回最大值或最小值,要获取时间点 t - d(d 为 Duration),可以使用 t.Add(-d)
*/
func (t Time) Sub(u Time) Duration
示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
now := time.Now()
// 调用time包下的sub函数进行时间截取
after := now.Sub(now.Local())
// 打印结果
fmt.Println(after)
}
/*
注意这些函数的返回值类型,因为他们的返回值类型不一定是time对象类型。有些需要将他们的类型进行转化
*/
Equal
判断两个时间是否相同:
/*
会考虑时区的影响,因此不同时区标准的时间也可以正确比较,Equal 方法和用 t==u 不同,Equal 方法还会比较地点和时区信息
*/
func (t Time) Equal(u Time) bool
示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时区时间
t := time.Now()
// 调用equal函数比较时间
bool := t.Equal(time.Now())
fmt.Println(bool)
}
Before
判断一个时间点是否在另一个时间点之前:
/*
t 代表的时间点在 u 之前,则返回真,否则返回假
*/
func (t Time) Before(u Time) bool
After
判断一个时间点是否在另一个时间点之后:
/*
t 代表的时间点在 u 之后,则返回真,否则返回假
*/
func (t Time) After(u Time) bool
定时器
本质:
一个通道(channel
)
调用函数:
通过time.Tick
函数进行设置
示例代码:
package main
import (
"fmt"
"time"
)
/*
调用时间间隔函数,进行定时器的设置
*/
func main() {
// 声明一个定时器(一秒一次)
ticker := time.Tick(time.Second)
// 循环打印定时器当中的内容
for i := range ticker {
fmt.Println(i)
}
}
时间格式化
时间格式格式化函数Format
,使用的是Go
语言的诞生时间2006 年 1 月 2 号 15 点 04 分 05 秒作为元时间
示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
now := time.Now()
// 格式化的模板为Go的出生时间2006年1月2号15点04分 Mon Jan
// 24h
fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))
// 12h
fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))
fmt.Println(now.Format("2006/01/02 15:04"))
fmt.Println(now.Format("15:04 2006/01/02"))
fmt.Println(now.Format("2006/01/02"))
}
解析字符串格式的时间
解析格式化时间字符串返回它代表的时间:(Parse
函数)
func Parse(layout, value string) (Time, error)
ParseInLocation
函数
func ParseInLocation(layout, value string, loc *Location) (Time, error)
Parse
与ParseInLocation
函数的不同之处:
-
第一,当缺少时区信息时,
Parse
将时间解释为UTC
时间,而ParseInLocation
将返回值的Location
设置为loc
; -
第二,当时间字符串提供了时区偏移量信息时,
Parse
会尝试去匹配本地时区,而ParseInLocation
会去匹配loc
。
示例代码:
package main
import (
"fmt"
"time"
)
/*
调用time包下的函数解析字符串时间
*/
func main() {
var layout string = "2006-01-02 15:04:05"
var timeStr string = "2019-12-12 15:22:12"
// 调用time包下的函数
timeObject, _ := time.Parse(layout, timeStr)
fmt.Println(timeObject)
// 调用ParseInLocation函数
timeObject2, _ := time.ParseInLocation(layout, timeStr, time.Local) // time.Local直接获取到当前时区的时间
fmt.Println(timeObject2)
}
It's a lonely road!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具