主要的内容是将 time.Time 按照不同的使用场景细分为 LocalDate LocalTime LocalDateTime OffsetDateTime 以及将来会有的 ZonedDateTime 等,将类型安全进行到底 xD 。
设计上尽量仿照 JSR-310 ,毕竟这个切分类型的思想也源自 JSR-310 。参考:threeten.org
对于某些可做出不同决策且个人不认为有明确优劣之分的设计,原则上遵守 JSR-310 习惯。
此外:
- 大部分代码使用 AI 完成,但都经过人工评审,可以放心使用。
- 该项目主要是参考既有成熟设计( JSR-310 ),涉及复杂算法的部分已经经过仔细的人工评审。
- 当前剩余和时区有关的部分尚未完善,因为 Go 没有很好地暴露
time.Location抽象,自行携带时区数据库基础设施显得过于笨重,目前还在考虑具体解决方案。此外因为大部分对标ZonedDateTime的操作均可通过 Go 标准库的time.Time完成,所以这个部分可能优先级不高。 - 由于 Go 语言本身与 Java 语言差异巨大,API 设计不可能照搬,已针对空值等不可避免的问题进行针对性处理,但目前仍然不排除后续调整部分具体 API 设计的情况,比如调整参数个数等。空值处理等核心设计不太可能变化。
- 核心类型已全部支持 Go 1.24 json 库支持的
IsZero()判定,可放心使用 omitzero 标记。
目前主要功能部分还剩下 Period Duration 以及时区相关等尚未完成,后续会尽量补全。
