新晋开源项目 Carbon 加入 Dromara,Gopher 的时间工具来了
对于 gopher
来说,时间处理是一个常见但又复杂的问题,特别是仅依赖内置的 time.Time
包时,尤其是我们在格式化时间的时候,需要用固定的 Layout
,如
now := time.Now() // 这几个数字不能乱写,不然转化过来的时间会很莫名其妙 strNow := now.Format("2006/01/02 03:04:05")
这时 carbon
的用武之地就展现出来了,在 Golang
语言圈中,如果你是做日期和时间相关的工作,还没有听说过 Carbon
库,我劝你还是把之前编写的日期和时间相关的代码再捋一捋,看看 Carbon
能帮你节省多少时间。
Carbon
是一个专为 Golang
设计的轻量级、语义化、对开发者友好的 时间处理库,被誉为 Golang
时间处理的瑞士军刀,它提供了一系列简洁而强大的 API
,使得时间操作变得异常简单。无论是基本的日期时间计算,还是复杂的时区转换,Carbon
都能轻松应对。此外,Carbon
已经被 awesome-go
收录,还被 gitee
评选为年度最有价值项目 (GVP
),证明了其在 Golang
社区中的受欢迎程度。
安装使用
Golang 版本大于等于 1.17 (推荐)
// 使用 github 库 go get -u github.com/golang-module/carbon/v2 import "github.com/golang-module/carbon/v2" // 使用 gitee 库 go get -u gitee.com/golang-module/carbon/v2 import "gitee.com/golang-module/carbon/v2"
Golang 版本小于 1.17 (必须)
// 使用 github 库 go get -u github.com/golang-module/carbon import "github.com/golang-module/carbon" // 使用 gitee 库 go get -u gitee.com/golang-module/carbon import "gitee.com/golang-module/carbon"
用法示例
假设当前时间为 2020-08-05 13:14:15.999999999 +0800 CST
设置全局默认值
carbon.SetDefault(carbon.Default{ Layout: carbon.DateTimeLayout, Timezone: carbon.PRC, WeekStartsAt: carbon.Sunday, Locale: "zh-CN", // 取值范围:lang 目录下翻译文件名,不包含文件后缀 })
Carbon
和 time.Time
互转
// 将标准 time.Time 转换成 Carboncarbon.CreateFromStdTime(time.Now()) // 将 Carbon 转换成标准 time.Timecarbon.Now().StdTime()
昨天、今天、明天
// 今天此刻 fmt.Printf("%s", carbon.Now()) // 2020-08-05 13:14:15 carbon.Now().String() // 2020-08-05 13:14:15 carbon.Now().ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Now().ToDateTimeString() // 2020-08-05 13:14:15 // 今天日期 carbon.Now().ToDateString() // 2020-08-05 // 今天时间 carbon.Now().ToTimeString() // 13:14:15 // 指定时区的今天此刻 carbon.Now(Carbon.NewYork).ToDateTimeString() // 2020-08-05 14:14:15 // 今天秒级时间戳 carbon.Now().Timestamp() // 1596604455 // 今天毫秒级时间戳 carbon.Now().TimestampMilli() // 1596604455999 // 今天微秒级时间戳 carbon.Now().TimestampMicro() // 1596604455999999 // 今天纳秒级时间戳 carbon.Now().TimestampNano() // 1596604455999999999 // 昨天此刻 fmt.Printf("%s", carbon.Yesterday()) // 2020-08-04 13:14:15 carbon.Yesterday().String() // 2020-08-04 13:14:15 carbon.Yesterday().ToString() // 2020-08-04 13:14:15 +0800 CST carbon.Yesterday().ToDateTimeString() // 2020-08-04 13:14:15 // 昨天日期 carbon.Yesterday().ToDateString() // 2020-08-04 // 昨天时间 carbon.Yesterday().ToTimeString() // 13:14:15 // 指定日期的昨天此刻 carbon.Parse("2021-01-28 13:14:15").Yesterday().ToDateTimeString() // 2021-01-27 13:14:15 // 指定时区的昨天此刻 carbon.Yesterday(Carbon.NewYork).ToDateTimeString() // 2020-08-04 14:14:15 // 昨天秒级时间戳 carbon.Yesterday().Timestamp() // 1596518055 // 昨天毫秒级时间戳 carbon.Yesterday().TimestampMilli() // 1596518055999 // 昨天微秒级时间戳 carbon.Yesterday().TimestampMicro() // 1596518055999999 // 昨天纳秒级时间戳 carbon.Yesterday().TimestampNano() // 1596518055999999999 // 明天此刻 fmt.Printf("%s", carbon.Tomorrow()) // 2020-08-06 13:14:15 carbon.Tomorrow().String() // 2020-08-06 13:14:15 carbon.Tomorrow().ToString() // 2020-08-06 13:14:15 +0800 CST carbon.Tomorrow().ToDateTimeString() // 2020-08-06 13:14:15 // 明天日期 carbon.Tomorrow().ToDateString() // 2020-08-06 // 明天时间 carbon.Tomorrow().ToTimeString() // 13:14:15 // 指定日期的明天此刻 carbon.Parse("2021-01-28 13:14:15").Tomorrow().ToDateTimeString() // 2021-01-29 13:14:15 // 指定时区的明天此刻 carbon.Tomorrow(Carbon.NewYork).ToDateTimeString() // 2020-08-06 14:14:15 // 明天秒级时间戳 carbon.Tomorrow().Timestamp() // 1596690855 // 明天毫秒级时间戳 carbon.Tomorrow().TimestampMilli() // 1596690855999 // 明天微秒级时间戳 carbon.Tomorrow().TimestampMicro() // 1596690855999999 // 明天纳秒级时间戳 carbon.Tomorrow().TimestampNano() // 1596690855999999999
创建 Carbon
实例
// 从秒级时间戳创建 Carbon 实例 carbon.CreateFromTimestamp(-1).ToString() // 1970-01-01 07:59:59 +0800 CST carbon.CreateFromTimestamp(0).ToString() // 1970-01-01 08:00:00 +0800 CST carbon.CreateFromTimestamp(1).ToString() // 1970-01-01 08:00:01 +0800 CST carbon.CreateFromTimestamp(1649735755).ToString() // 2022-04-12 11:55:55 +0800 CST // 从毫秒级时间戳创建 Carbon 实例 carbon.CreateFromTimestampMilli(1649735755981).ToString() // 2022-04-12 11:55:55.981 +0800 CST // 从微秒级时间戳创建 Carbon 实例 carbon.CreateFromTimestampMicro(1649735755981566).ToString() // 2022-04-12 11:55:55.981566 +0800 CST // 从纳秒级时间戳创建 Carbon 实例 carbon.CreateFromTimestampNano(1649735755981566000).ToString() // 2022-04-12 11:55:55.981566 +0800 CST // 从年月日时分秒创建 Carbon 实例 carbon.CreateFromDateTime(2020, 8, 5, 13, 14, 15).ToString() // 2020-08-05 13:14:15 +0800 CST // 从年月日时分秒创建 Carbon 实例,包含毫秒 carbon.CreateFromDateTimeMilli(2020, 8, 5, 13, 14, 15, 999).ToString() // 2020-08-05 13:14:15.999 +0800 CST // 从年月日时分秒创建 Carbon 实例,包含微秒 carbon.CreateFromDateTimeMicro(2020, 8, 5, 13, 14, 15, 999999).ToString() // 2020-08-05 13:14:15.999999 +0800 CST // 从年月日时分秒创建 Carbon 实例,包含纳秒 carbon.CreateFromDateTimeNano(2020, 8, 5, 13, 14, 15, 999999999).ToString() // 2020-08-05 13:14:15.999999999 +0800 CST // 从年月日创建 Carbon 实例 carbon.CreateFromDate(2020, 8, 5).ToString() // 2020-08-05 00:00:00 +0800 CST // 从年月日创建 Carbon 实例,包含毫秒 carbon.CreateFromDateMilli(2020, 8, 5, 999).ToString() // 2020-08-05 00:00:00.999 +0800 CST // 从年月日创建 Carbon 实例,包含微秒 carbon.CreateFromDateMicro(2020, 8, 5, 999999).ToString() // 2020-08-05 00:00:00.999999 +0800 CST // 从年月日创建 Carbon 实例,包含纳秒 carbon.CreateFromDateNano(2020, 8, 5, 999999999).ToString() // 2020-08-05 00:00:00.999999999 +0800 CST // 从时分秒创建 Carbon 实例(年月日默认为当前年月日) carbon.CreateFromTime(13, 14, 15).ToString() // 2020-08-05 13:14:15 +0800 CST // 从时分秒创建 Carbon 实例(年月日默认为当前年月日),包含毫秒 carbon.CreateFromTimeMilli(13, 14, 15, 999).ToString() // 2020-08-05 13:14:15.999 +0800 CST // 从时分秒创建 Carbon 实例(年月日默认为当前年月日),包含微秒 carbon.CreateFromTimeMicro(13, 14, 15, 999999).ToString() // 2020-08-05 13:14:15.999999 +0800 CST // 从时分秒创建 Carbon 实例(年月日默认为当前年月日),包含纳秒 carbon.CreateFromTimeNano(13, 14, 15, 999999999).ToString() // 2020-08-05 13:14:15.999999999 +0800 CST
将 时间字符串
解析成 Carbon
实例
carbon.Parse("").ToDateTimeString() // 空字符串 carbon.Parse("0").ToDateTimeString() // 空字符串 carbon.Parse("00:00:00").ToDateTimeString() // 空字符串 carbon.Parse("0000-00-00").ToDateTimeString() // 空字符串 carbon.Parse("0000-00-00 00:00:00").ToDateTimeString() // 空字符串 carbon.Parse("now").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("yesterday").ToString() // 2020-08-04 13:14:15 +0800 CST carbon.Parse("tomorrow").ToString() // 2020-08-06 13:14:15 +0800 CST carbon.Parse("2020").ToString() // 2020-01-01 00:00:00 +0800 CST carbon.Parse("2020-8").ToString() // 2020-08-01 00:00:00 +0800 CST carbon.Parse("2020-08").ToString() // 2020-08-01 00:00:00 +0800 CST carbon.Parse("2020-8-5").ToString() // 2020-08-05 00:00:00 +0800 CST carbon.Parse("2020-8-05").ToString() // 2020-08-05 00:00:00 +0800 CST carbon.Parse("2020-08-05").ToString() // 2020-08-05 00:00:00 +0800 CST carbon.Parse("2020-08-05.999").ToString() // 2020-08-05 00:00:00.999 +0800 CST carbon.Parse("2020-08-05.999999").ToString() // 2020-08-05 00:00:00.999999 +0800 CST carbon.Parse("2020-08-05.999999999").ToString() // 2020-08-05 00:00:00.999999999 +0800 CST carbon.Parse("2020-8-5 13:14:15").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-8-05 13:14:15").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-08-5 13:14:15").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-08-05 13:14:15").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-08-05 13:14:15.999").ToString() // 2020-08-05 13:14:15.999 +0800 CST carbon.Parse("2020-08-05 13:14:15.999999").ToString() // 2020-08-05 13:14:15.999999 +0800 CST carbon.Parse("2020-08-05 13:14:15.999999999").ToString() // 2020-08-05 13:14:15.999999999 +0800 CST carbon.Parse("2020-8-5T13:14:15+08:00").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-8-05T13:14:15+08:00").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-08-05T13:14:15+08:00").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("2020-08-05T13:14:15.999+08:00").ToString() // 2020-08-05 13:14:15.999 +0800 CST carbon.Parse("2020-08-05T13:14:15.999999+08:00").ToString() // 2020-08-05 13:14:15.999999 +0800 CST carbon.Parse("2020-08-05T13:14:15.999999999+08:00").ToString() // 2020-08-05 13:14:15.999999999 +0800 CST carbon.Parse("20200805").ToString() // 2020-08-05 00:00:00 +0800 CST carbon.Parse("20200805131415").ToString() // 2020-08-05 13:14:15 +0800 CST carbon.Parse("20200805131415.999").ToString() // 2020-08-05 13:14:15.999 +0800 CST carbon.Parse("20200805131415.999999").ToString() // 2020-08-05 13:14:15.999999 +0800 CST carbon.Parse("20200805131415.999999999").ToString() // 2020-08-05 13:14:15.999999999 +0800 CST carbon.Parse("20200805131415.999+08:00").ToString() // 2020-08-05 13:14:15.999 +0800 CST carbon.Parse("20200805131415.999999+08:00").ToString() // 2020-08-05 13:14:15.999999 +0800 CST carbon.Parse("20200805131415.999999999+08:00").ToString() // 2020-08-05 13:14:15.999999999 +0800 CST
carbon
还提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
将 公历
转换成 农历
// 获取农历生肖 carbon.Parse("2020-08-05 13:14:15").Lunar().Animal() // 鼠 // 获取农历节日 carbon.Parse("2021-02-12 13:14:15").Lunar().Festival() // 春节 // 获取农历年份 carbon.Parse("2020-08-05 13:14:15").Lunar().Year() // 2020 // 获取农历月份 carbon.Parse("2020-08-05 13:14:15").Lunar().Month() // 6 // 获取农历闰月月份 carbon.Parse("2020-08-05 13:14:15").Lunar().LeapMonth() // 4 // 获取农历日期 carbon.Parse("2020-08-05 13:14:15").Lunar().Day() // 16 // 获取农历时辰 carbon.Parse("2020-08-05 13:14:15").Lunar().Hour() // 13 // 获取农历分钟 carbon.Parse("2020-08-05 13:14:15").Lunar().Minute() // 14 // 获取农历秒数 carbon.Parse("2020-08-05 13:14:15").Lunar().Second() // 15 // 获取农历日期时间字符串 carbon.Parse("2020-08-05 13:14:15").Lunar().String() // 2020-06-16 13:14:15 fmt.Printf("%s", carbon.Parse("2020-08-05 13:14:15").Lunar()) // 2020-06-16 13:14:15 // 获取农历年字符串 carbon.Parse("2020-08-05 13:14:15").Lunar().ToYearString() // 二零二零 // 获取农历月字符串 carbon.Parse("2020-08-05 13:14:15").Lunar().ToMonthString() // 六月 // 获取农历闰月字符串 carbon.Parse("2020-04-23 13:14:15").Lunar().ToMonthString() // 闰四月 // 获取农历周字符串 carbon.Parse("2020-04-23 13:14:15").Lunar().ToWeekString() // 周四 // 获取农历天字符串 carbon.Parse("2020-08-05 13:14:15").Lunar().ToDayString() // 十六 // 获取农历日期字符串 carbon.Parse("2020-08-05 13:14:15").Lunar().ToDateString() // 二零二零年六月十六 // 是否是零值时间 carbon.Parse("0000-00-00 00:00:00").Lunar().IsZero() // true carbon.Parse("2020-08-05 13:14:15").Lunar().IsZero() // false // 是否是农历闰年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsLeapYear() // true // 是否是农历闰月 carbon.Parse("2020-08-05 13:14:15").Lunar().IsLeapMonth() // false // 是否是鼠年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsRatYear() // true // 是否是牛年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsOxYear() // false // 是否是虎年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsTigerYear() // false // 是否是兔年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsRabbitYear() // false // 是否是龙年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsDragonYear() // false // 是否是蛇年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsSnakeYear() // false // 是否是马年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsHorseYear() // false // 是否是羊年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsGoatYear() // false // 是否是猴年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsMonkeyYear() // false // 是否是鸡年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsRoosterYear() // false // 是否是狗年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsDogYear() // false // 是否是猪年 carbon.Parse("2020-08-05 13:14:15").Lunar().IsPigYear() // false
将 农历
转化成 公历
// 将农历 二零二三年腊月十一 转化为 公历 carbon.CreateFromLunar(2023, 12, 11, 0, 0, 0, false).ToDateTimeString() // 2024-01-21 00:00:00 // 将农历 二零二三年二月十一 转化为 公历 carbon.CreateFromLunar(2023, 2, 11, 0, 0, 0, false).ToDateTimeString() // 2023-03-02 00:00:00 // 将农历 二零二三年闰二月十一 转化为 公历 carbon.CreateFromLunar(2023, 2, 11, 0, 0, 0, true).ToDateTimeString() // 2023-04-01 00:00:00
目前已支持简体中文、繁体中文、英语、日语、德语、西班牙语、法语、阿拉伯语等 26 国语言的支持。
Laravel
结语
无论是新手还是经验丰富的 Golang
开发者,Carbon
都是一个值得尝试的库。通过它,你可以更加优雅地处理时间问题,提高代码的可读性和开发效率。现在就将 Carbon
引入你的项目,享受编程带来的乐趣吧!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Linux 大规模移除疑似俄开发者,开源药丸?
据Linux 内核新闻站 http://LWN.net的相关报道(https://lwn.net/Articles/995186/)及国内开源爱好者翻译(编辑:柯晓宇 (Kexy Biscuit) @KexyBiscuit,校对:白铭骢 @JeffBai)—— 日前,Linux 内核主要维护者之一 Greg Kroah-Hartman (Greg K-H) 提交了一项不寻常的“文档”更新,将数名具有 <.ru> 顶级域名邮箱的维护者,和一名明确为俄罗斯身份的维护者从 MAINTAINERS(维护者名录)文件除名。 这一提交已于上周日被 Linus Torvalds 拉取并包含于 6.12-rc4 版本的代码中。 Greg K-H 并未详述这项更新的具体原因,仅含糊其辞地表示该更改是“由于某些合规性要求”,并指出“(相关人员)提供充足文档后,方可回归(维护者名录)”。 相关的维护者移除方式相当粗暴,其中部分子系统由于唯一维护者使用 <.ru> 顶级域名邮箱,整个子系统都被从 MAINTAINERS 文件中移除,这之中不乏诸如 UFS 文件系统和 PPTP 驱动等重...
- 下一篇
deepin 扩展全球版图,拥抱‘天空之境’玻利维亚
deepin 第 8 个海外分支社区成立啦!!! deepin 第 8 个海外分支社区成立啦!!! deepin 第 8 个海外分支社区成立啦!!! 随着 deepin 社区国际化步伐的稳健前行,我们欣喜地宣布,deepin 的第 8 个海外分支社区——玻利维亚站,现已正式成立!这也标志着 deepin 社区在南美洲的影响力得到了进一步提升,也为 deepin 的全球化征程铺设了更加坚实的基础。 deepin 玻利维亚社区:https://deepinbolivia.com/ 玻利维亚是位于南美洲西部的内陆国家,拥有丰富的文化多样性。玻利维亚有若干“世界之最”,有世界上海拔最高的首都拉巴斯,有世界上最大的高原湖泊的的喀喀湖,有著名的乌尤尼盐沼,也就是世界著名的“天空之镜”······,而现在又有最美的桌面操作系统 deepin。 玻利维亚分支站点的团队领航者,乃是一位经验丰富的 UI/UX 设计师。自2015年起,他便与 deepin 结下了不解之缘,遇见 deepin 的第一眼,便被 deepin 的美学设计理念、流畅的操作体验以及稳健的性能表现所吸引,从此他便成为了 deepin ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路