您的位置:

golang时间格式化详解

一、基础概念

在golang中,时间在代码中使用time.Time类型表示,它包含了年、月、日、时、分、秒、纳秒、时区等信息。对于这些信息的格式化,golang提供了fmt包和time包两个包的支持。

二、fmt包时间格式化

在fmt包中,时间格式化使用的是go语言自带的格式化字符串,例如:

    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))

其中,"2006-01-02 15:04:05"代表了go语言的诞生时间:2006年1月2日15点04分05秒,除此之外,还可以使用其他的格式化字符串,例如:

    fmt.Println(time.Now().Format("2006/01/02"))

使用“/”分割时间,并且年、月、日的顺序不同于前面的例子。

在实际使用中,fmt包的时间格式化常用于控制台输出等简单场景。

三、time包时间格式化

在time包中,时间格式化使用的是time.Time类型的Format函数,例如:

    t := time.Now()
    fmt.Println(t.Format("2006-01-02 15:04:05"))

与fmt包相比,time包的时间格式化更加灵活,支持更多的结构体和函数。下面是一些常用的时间格式化方法:

四、time包时间常用格式化方法

1. 时间戳转为time.Time类型

Unix函数可以将时间戳转为time.Time类型:

    t := time.Unix(123456789, 0)
    fmt.Println(t)

2. time.Time类型取年、月、日等具体时间

time.Time类型包含了具体的时间信息,可以通过Year、Month、Day等函数获取对应的时间信息:

    t := time.Now()
    fmt.Println(t.Year())
    fmt.Println(t.Month())
    fmt.Println(t.Day())

3. 时间加减运算

time.Time类型的Add和Sub函数可以进行时间的加减运算:

    t := time.Now()
    fmt.Println(t)
    fmt.Println(t.Add(24 * time.Hour)) // 加一天
    fmt.Println(t.Sub(time.Hour))     // 减一小时
    fmt.Println(t.AddDate(1, 0, 0))    // 加一年

4. 时间比较

time.Time类型的Before和After函数可以进行时间的比较:

    t1 := time.Now()
    t2 := time.Now().Add(24 * time.Hour)

    if t1.Before(t2) {
        fmt.Println("t1 before t2")
    }

    if t2.After(t1) {
        fmt.Println("t2 after t1")
    }

5. 时间格式化

time.Time类型的Format函数可以将时间格式化为字符串:

    t := time.Now()
    fmt.Println(t.Format("2006-01-02 15:04:05"))
    fmt.Println(t.Format("2006/01/02"))

五、总结

golang的时间格式化支持非常灵活,可以通过fmt包和time包来实现不同的时间格式化需求。开发者在实践中可以根据具体需求灵活选择,一定要注意格式化字符串的正确性。