我们在日常开发中,常常会对时间进行各种处理,今天我来介绍一个 go 处理时间的库 golang-module/carbon。
Carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。
安装
go版本大于 1.16
go get -u github.com/golang-module/carbon/v2
版本小于 1.16
go get -u github.com/golang-module/carbon
使用
创建 carbon 实例
carbon.Now() // 获取当前时间
carbon.Now("Asia/Qatar").ToDateTimeString() // 不同时区当前的时间,卡塔尔当前的时间
carbon.Yesterday() // 昨天
carbon.CreateFromTime(22, 9, 13).ToString()
carbon.Tomorrow().ToDateString() // 明天
标准库转换
carbon 还可以和标准库 time 进行相互转换。
// 将 标准库 time 转换为 carbon 实例
carbon.Time2Carbon(time.Now())
// carbon 转换为 time.Time
解析字符串
carbon 可以解析字符串,生成carbon 实例
// 将时间字符串转换为 carbon 实例
fmt.Println(carbon.Parse("1998-04-01").ToDateTimeString())
carbon.Parse("tomorrow").ToString()
carbon.ParseByFormat("2020|08|05 13|14|15", "Y|m|d H|i|s").ToDateTimeString() // 2020-08-05 13:14:15
carbon.ParseByFormat("It is 2020-08-05 13:14:15", "\\I\\t \\i\\s Y-m-d H:i:s").ToDateTimeString() // 2020-08-05 13:14:15
carbon.ParseByFormat("今天是 2020年08月05日13时14分15秒", "今天是 Y年m月d日H时i分s秒").ToDateTimeString() // 2020-08-05 13:14:15
carbon.ParseByFormat("2020-08-05 13:14:15", "Y-m-d H:i:s", carbon.Tokyo).ToDateTimeString() // 2020-08-05 14:14:15
获取开始时间和结束时间
carbon 可以很方便的获取一个时刻的开始和结束
// 获取本世纪的开始
fmt.Println(carbon.Parse("2020-08-05 13:14:15").StartOfCentury().ToDateTimeString())
// 本世纪结束时间
fmt.Println(carbon.Parse("2020-08-05 13:14:15").EndOfCentury().ToDateTimeString())
// 本年结束时间
carbon.Parse("2020-08-05 13:14:15").EndOfYear().ToDateTimeString()
时间旅行
carbon 实现了时间旅行的功能,增加或减少时间可以到达另一个时间点
// 三个世纪后
carbon.Parse("2020-02-29 13:14:15").AddCenturies(3).ToDateTimeString() // 2320-02-29 13:14:15
// 一个世纪后(月份不溢出)
carbon.Parse("2020-02-29 13:14:15").AddCenturyNoOverflow().ToDateTimeString()
// 30 天后
fmt.Println(carbon.Now().AddDays(30).ToDateTimeString())
// 30天前
fmt.Println(carbon.Now().SubDays(30).ToDateTimeString())
时间差
carbon.Parse("2020-08-05 13:14:15").DiffInSeconds(carbon.Parse("2020-08-05 13:14:14")) // -1
例子
接下来看看实际的例子:
package main
import (
"fmt"
"github.com/golang-module/carbon/v2"
"time"
)
func main() {
fmt.Printf("%s\n", carbon.Now())
fmt.Printf("%s\n", carbon.CreateFromTimestamp(0).ToString())
fmt.Println(carbon.Now("Asia/Qatar").ToDateTimeString())
fmt.Println(carbon.CreateFromTime(22, 9, 13).ToString())
fmt.Println(carbon.Parse("1998-04-01").ToDateTimeString())
fmt.Println(carbon.Time2Carbon(time.Now()))
fmt.Println(carbon.Now().Carbon2Time())
fmt.Println(carbon.Parse("2020-08-05 13:14:15").StartOfCentury().ToDateTimeString())
fmt.Println(carbon.Parse("2020-08-05 13:14:15").EndOfCentury().ToDateTimeString())
fmt.Println(carbon.Parse("2020-02-29 13:14:15").AddCenturies(3).ToDateTimeString())
fmt.Println(carbon.Now().AddDays(30).ToDateTimeString())
fmt.Println(carbon.Now().SubDays(30).ToDateTimeString())
}
2022-12-03 23:51:28
1970-01-01 08:00:00 +0800 CST
2022-12-03 18:51:28
2022-12-03 22:09:13.9376781 +0800 CST
1998-04-01 00:00:00
2022-12-03 23:51:28
2022-12-03 23:51:28.9376781 +0800 CST
2000-01-01 00:00:00
2099-12-31 23:59:59
2320-02-29 13:14:15
2023-01-02 23:51:28
2022-11-03 23:51:28
小结
本文主要结束了一个时间处理库 carbon, 从文档来看,carbon 提供的功能特别丰富,让你不用做额外的处理。