carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
carbon 目前已捐赠给 dromara 开源组织,已被 awesome-go 收录,并获得 gitee 2024 年最有价值项目(GVP)和 gitcode 2024 年度 G-Star 项目,如果您觉得不错,请给个 star 吧
document: carbon.go-pkg.com
github: github.com/dromara/carbon
gitee: gitee.com/dromara/carbon
gitcode: gitcode.com/dromara/carbon
language.go
的 SetLocale
方法中使用 sync.Once
确保语言文件只加载一次,使用 sync.Map
进行线程安全的缓存helper.go
的 format2layout
方法中为转义字符处理添加边界检查,防止越界访问导致的 panic
![]() |
1
Ipsum 8 天前 via Android
点赞
|
2
iseki 8 天前 via Android
有没有实现了 threeten 模型的时间库?本来想自己搓一个,但是太麻烦了,工作量很大。
|
6
iseki 8 天前 via Android
@gouguoyin 我没看到你和 ThreeTen 对标的类型定义啊,类似 Instant LocalDateTime LocalDate ZonedDateTime 这样的东西。
|
![]() |
8
gouguoyin OP @iseki carbon 提供了 SetTimezone 方法来方便切换时区,如
carbon.Parse("2020-08-05 13:14:15").SetTimezone(carbon.PRC).ToString() // 2020-08-05 21:14:15 +0800 CST |
9
iseki 8 天前 via Android
@gouguoyin 唔,不行,区分类型的一个目的是类型安全。
比如我的函数入参是一个 Instant ,代表我不关心除绝对时间点之外的任何信息;如果入参是一个 LocalDate ,意味着我只接受一个日期,时间点该如何转换为当地日期是调用者需要考虑到事情。 你这样的设计完全无法表达这个语义。 |
![]() |
10
dandankele 7 天前
才发现 dromara 社区有那么多熟悉的项目..这是个什么神奇的组织
|
![]() |
11
gouguoyin OP |