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