美文网首页
golang 时间的各种用法

golang 时间的各种用法

作者: 彩色代码 | 来源:发表于2023-04-27 10:35 被阅读0次

时间是计量时间的标准,常用于记录、比较和计算时间间隔。以下是时间的各种用法:

  1. 表示时间的类型
    在 Go 语言中,时间使用 time.Time 类型表示,它包含了日期和时间信息。例如,可以使用 time.Now() 获取当前时间:

now := time.Now() // 获取当前时间
时间的格式化
可以使用 time.Format() 函数将时间格式化为字符串,例如:

now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05")) // 输出:2023-04-27 14:30:00
其中,"2006-01-02 15:04:05" 是一个固定的格式化字符串,表示年月日时分秒。

2.时间的解析
可以使用 time.Parse() 函数将字符串解析为时间,例如:

dateStr := "2023-04-27 14:30:00"
date, err := time.Parse("2006-01-02 15:04:05", dateStr)
if err != nil {
// 解析错误
}
其中,"2006-01-02 15:04:05" 是一个固定的解析字符串,表示年月日时分秒。

3.时间的比较
可以使用 time.Before()、time.After()、time.Equal() 等函数比较两个时间的大小关系,例如:

now := time.Now()
tomorrow := now.AddDate(0, 0, 1)
if tomorrow.After(now) {
fmt.Println("明天比今天晚")
}

  1. 时间的计算
    可以使用 time.Add()、time.Sub() 等函数进行时间的计算,例如:

now := time.Now()
yesterday := now.AddDate(0, 0, -1)
duration := now.Sub(yesterday)
fmt.Println(duration.Hours()) // 输出:24
其中,AddDate() 函数可以对时间进行加减操作,Sub() 函数可以计算时间间隔,返回 time.Duration 类型的值。

  1. 时间的单位
    time.Duration 类型表示时间间隔,它支持以下单位:

纳秒:time.Nanosecond
微秒:time.Microsecond
毫秒:time.Millisecond
秒:time.Second
分钟:time.Minute
小时:time.Hour
例如:

duration := time.Duration(1) * time.Hour
fmt.Println(duration.Seconds()) // 输出:3600

6.定时器
可以使用 time.Tick() 函数创建一个定时器,例如:

tick := time.Tick(time.Second)
for now := range tick {
fmt.Println(now)
}
其中,time.Tick(time.Second) 表示每秒触发一次定时器。

时区
时区是一个基于经度的概念,表示地球上某个特定区域内使用的标准时间。Go 语言中,可以使用 time.LoadLocation() 函数加载指定时区,例如:

loc, err := time.LoadLocation("America/New_York")
if err != nil {
// 加载时区错误
}
now := time.Now().In(loc)
fmt.Println(now)
其中,"America/New_York" 是一个有效的时区名称,可以通过 time.LoadLocation() 函数加载。time.In() 函数可以将时间转换到指定时区。

  1. 计时器
    可以使用 time.NewTimer() 函数创建一个计时器,例如:

timer := time.NewTimer(time.Second)
<-timer.C // 等待定时器触发
fmt.Println("定时器触发")
其中,time.NewTimer(time.Second) 表示一个 1 秒钟的计时器。可以通过 <-timer.C 等待计时器触发。

8.时间戳
时间戳是指一个特定的时间,表示自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来经过的秒数。可以使用 time.Unix() 函数将时间戳转换为时间,例如:

timestamp := int64(1651047620)
date := time.Unix(timestamp, 0)
fmt.Println(date.Format("2006-01-02 15:04:05"))
其中,time.Unix() 函数的第一个参数是时间戳,第二个参数表示纳秒精度,一般设置为 0。

9.定时任务
可以使用 time.Ticker() 函数创建一个定时任务,例如:

ticker := time.NewTicker(time.Second)
quit := make(chan bool)
go func() {
for {
select {
case now := <-ticker.C:
fmt.Println(now)
case <-quit:
ticker.Stop()
return
}
}
}()
time.Sleep(5 * time.Second)
quit <- true
fmt.Println("定时任务结束")
其中,time.NewTicker(time.Second) 表示每秒钟触发一次定时任务。可以使用 select 语句监听多个 channel,实现定时任务的循环触发和停止。

  1. 时间格式化字符串
    时间格式化字符串指定了时间的显示格式,由特定的字符表示不同的时间元素。常用的格式化字符串如下:

字符 含义
2006 年(示例中的 2006 年)
01 月(01 表示数字形式,Jan 表示英文缩写形式)
02 日(两位数字表示)
15 小时(24 小时制,两位数字表示)
03 小时(12 小时制,两位数字表示)
PM 上午或下午(仅适用于 12 小时制)
04 分钟(两位数字

相关文章

网友评论

      本文标题:golang 时间的各种用法

      本文链接:https://www.haomeiwen.com/subject/jpvvjdtx.html