主要的内容是将 time.Time 按照不同的使用场景细分为 LocalDate LocalTime LocalDateTime OffsetDateTime 以及将来会有的 ZonedDateTime 等,将类型安全进行到底 xD 。
设计上尽量仿照 JSR-310 ,毕竟这个切分类型的思想也源自 JSR-310 。参考:threeten.org
对于某些可做出不同决策且个人不认为有明确优劣之分的设计,原则上遵守 JSR-310 习惯。
此外:
time.Location 抽象,自行携带时区数据库基础设施显得过于笨重,目前还在考虑具体解决方案。此外因为大部分对标 ZonedDateTime 的操作均可通过 Go 标准库的 time.Time 完成,所以这个部分可能优先级不高。IsZero() 判定,可放心使用 omitzero 标记。目前主要功能部分还剩下 Period Duration 以及时区相关等尚未完成,后续会尽量补全。
1
yb2313 8 天前
别从 js 里抄就好
|
2
jjx 8 天前 大部分代码使用 AI 完成
以后还是要小心点了 个人看法 |
3
Baymaxbowen 8 天前 |
4
akiyamamio 8 天前
gtime 就挺好用的了
|
5
sunmoon1983 8 天前
感觉 carbon 和 gtime 都可以呀
|
6
apkapb 8 天前
我怎么觉得做为自带的标准库已经够好用了,什么 Time{},Date(),以及 Duration ,完全够用了。
反倒是 Java 里面的,特别是结合 Android ,写得我难受死了 |
7
zoharSoul 8 天前
很棒, 是不是支持 yyyy-MM-dd 这种表示法?
|
8
Ketteiron 8 天前
go 的时间库确实没有大而全的,一旦需要用到只能东拼西凑
如果只需要 Local ,我会用 https://github.com/googleapis/google-cloud-go/blob/main/civil/civil.go 但也就只有 Local |
9
iseki OP @Baymaxbowen js 有了,js-joda
|
11
iseki OP @zoharSoul 暂时不提供自定义格式化功能,只提供标准格式,这个包主要用于运算和类型安全。考虑到 Go 的使用场景,在经典后端下,使用自定义格式化功能的地方,不多。
|
12
iseki OP @sunmoon1983 和 carbon gtime 设计思路不同,他们都没有采用 310 建模。这两个库和 time.Time 在类型上没有区别。
|
14
oom 8 天前
6 ,star 了
|
15
cooooing 8 天前
@Baymaxbowen 生草,一个没答对
|
16
wangtian2020 8 天前
看到前几个 go 帖子我就想说了,go 连 dayjs 抄都抄不像,js 几 kb 就能实现的事儿
|
17
encounter2017 8 天前
不支持 format 好,要不然又会有 2006-01-02 15:04:05 手动狗头
|
18
iseki OP @encounter2017 当然考虑到 JSR-310 包含这个功能,也许以后会支持上。
|
21
z1154505909 8 天前
@Baymaxbowen 做了一遍,我后端崽认输。都他妈是什么玩意
|
22
roundgis 8 天前 via Android
@Baymaxbowen 这个可以作为面试题
|
23
Baymaxbowen 8 天前 via iPhone
@roundgis 那我要干翻面试官
|
24
iseki OP 提醒一下本 lib 是按照 Java 的语言提案 310 号编写的,该提案对应的功能已经在 Java8 时进入
Java 标准库 java.time 。 和 JavaScript 没有任何关系。 |
25
NewYear 8 天前
我们可以在 2026 年 0 月 1 日相聚……
|
27
iseki OP @NewYear 我这有 guard ,这个事我还特别关注过啊
if month < January || month > December { e = newError("month %d out of range", month) |
28
RedisMasterNode 8 天前
说实话为什么要把 Java 那套带进来呢...= =不反对(毕竟辛苦开发的)但是不看好会有很多受众。
前面的人也回复过了 Go 里面已经有不少好用的开源时间/日期 Package ,https://github.com/dromara/carbon 就挺好用的。 不太看好这个能有人喜欢用。 |
29
iseki OP @RedisMasterNode 看了下 carbon ,确实很完善,但是缺了一些点刚好 JSR-310 的东西可以补上,所以就弄了。
|
30
zhady009 7 天前
@RedisMasterNode 抄 jdk 没毛病好用的时间库,关注时区、关注时差、UTC 和本地时间每种场景都有
|
31
RedisMasterNode 7 天前
@zhady009 这些难道不是都有吗...这不是最基础的吗
|
32
iseki OP @RedisMasterNode 标准库没有,civil 有但是不全,不过勉强能用。carbon 看上去有,但实际上不一样的。
|
33
RedisMasterNode 7 天前
@iseki 我会建议向高 star 仓库开 pr 而没有必要重新造一个全新的轮子
|
34
iseki OP @RedisMasterNode civil 这个可以考虑,但是和 carbon 那种思路并不相同。所以选择干脆按照 JSR-310 开新的项目,一些取舍也不必纠结,比如隔壁贴讨论的 MinusMonth 语义什么的。
|
35
zhady009 6 天前 @RedisMasterNode 其实差挺多的,Go 标准库里的表达歧义 JDK 在类型上就给你表达清楚了,历法也没有 JDK 的好使。主要问题还是 API 表达能力差会有歧义,你说能用就行那就这样吧
|
36
iseki OP 另外就是 Go 标准库有个很扭曲的设计,我倾向于是设计者忘了这件事。Weekday 中 0=Sunday ,而 Month 则是 0=无效值
|
39
Nzelites 1 天前
@Baymaxbowen 给我逗乐了
|
40
iseki OP 目前 Temporal LocalDate LocalTime LocalDateTime 已完成,数据库支持已测试 PostgreSQL/MySQL 。
下一步将补充 ZonedDateTime 和 Duration 。 |