golang 日期函数,常用用法

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

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("明天比今天晚")
}

4. 时间的计算

可以使用 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 类型的值。

5. 时间的单位

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) 表示每秒触发一次定时器。

7. 时区

时区是一个基于经度的概念,表示地球上某个特定区域内使用的标准时间。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() 函数可以将时间转换到指定时区。

8. 计时器

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

timer := time.NewTimer(time.Second)
<-timer.C // 等待定时器触发
fmt.Println("定时器触发")

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

9.时间戳

时间戳是指一个特定的时间,表示自 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。

10.定时任务

可以使用 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,实现定时任务的循环触发和停止。

11. 时间格式化字符串

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值