time 时间处理

Go语言提供的time包提供了一系列实用的方法,用于处理时间、时间格式化、时间段等。这篇笔记我们简单学习time的用法。

获取当前时间

Go语言中获取当前时间非常简单,调用Now()方法即可。

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println(time.Now())
}

运行输出:

2023-04-08 22:12:03.1563724 +0800 CST m=+0.001021801

时间解析和格式化

Go语言time模块有一个极为糟糕、让人眼前一黑的垃圾设计,它使用一个特殊的时间2006-01-02 15:04:05作为格式化模板,而非类似Java等使用形如yyyyMMdd的形式,这个想当然的时间令人费解而且记错某个数字可能就会引发一场灾难!下面是Go语言解析字符串为Time对象和格式化Time对象的例子代码。

package main

import (
    "fmt"
    "time"
)

func main() {
    const layout1 string = "2006-01-02 15:04:05"
    const layout2 string = "2006/01/02 15:04:05"

    // 解析字符串为Time对象
    t, err := time.Parse(layout1, "2023-04-08 22:21:00")
    if err != nil {
        fmt.Println(err)
        return
    }

    // 格式化Time对象为字符串
    s := t.Format(layout2)

    fmt.Println(s)
}

输出结果:

2023/04/08 22:00:00

除了手写类似2006-01-02 15:04:05这种格式化模板,time模块内部定义了一些常量,不过都是一些不适合展示的标准格式,较少用到。

时间段

除了Time结构体,time包还提供了一个Duration结构体,用于表示时间段。我们可以使用ParseDuration()等方法创建时间段。获得的Duration可以用于和时间点进行加减运算。

package main

import (
    "fmt"
    "time"
)

func main() {
    dua1, err := time.ParseDuration("100s")
    if err != nil {
        fmt.Println(err)
        return
    }

    dua2 := 100 * time.Second

    fmt.Println(dua1)
    fmt.Println(dua2)
}

以上dua1dua2都是一个100秒的时间段,即1分40秒。

时间运算

下面例子我们对当前时间增加了100秒。

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    now = now.Add(100 * time.Second)
    fmt.Println(now)
}

下面例子计算了当前时间到一个过去的指定日期的差。

package main

import (
    "fmt"
    "time"
)

func main() {
    const layout string = "2006-01-02 15:04:05"

    now := time.Now()
    past, err := time.Parse(layout, "2023-04-01 00:00:00")
    if err != nil {
        fmt.Println(err)
        return
    }
    dua := now.Sub(past)

    fmt.Println(dua)
}
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap