1 个不稳定版本
0.1.0 | 2022年1月18日 |
---|
#299 在 日期和时间
99KB
1.5K SLoC
astrotime
适用于科学和天文学的时间相关类型(及转换)。
此库轻量级且性能高。
功能
目前提供以下功能
- 处理涵盖整个宇宙持续时间的时刻。
- 处理飞秒(attosecond)精度的时间。
- 允许您处理格里高利历或儒略历的日历日期和时间。
- 允许您处理儒略日值。
- 在时间标准之间进行转换(例如 UTC、TAI、TT、TCG、TCB)。
- 使用
Tcg
(TCG 用于地心卫星)和Tcb
(TCB 用于质心太阳系物体)时间标准考虑了爱因斯坦参考系。 - 在 UTC 转换中考虑了闰秒(但闰秒列表当前是编译在内的,可能会过时)。
- 使用
- 为 1900.0、J1900.0、Unixtime 基准时间、Y2K 等知名纪元提供精确的瞬间。
- 可选的 serde 序列化(启用功能 'serde')
目标
以下目前不可用
- 从 IETF 源在线更新闰秒的能力。
- 处理诸如以下之类的民用时间问题
- 时区
- 夏令时
- 上午/下午与 24 小时制时间
- 为 'chrono' 和 'time' 库中的类型以及 rust std SystemTime 提供可能丢失数据的转换。
- 添加 GPS 时间和 LORAN-C(容易)
- 添加恒星时
- 为 Duration、Instant 和 DateTime 实现 float_cmp 特性的 ApproxEq
一个 Duration 类型
Duration
表示时间间隔。
Duration
可以处理长达宇宙年龄 40 倍的时间长度,并具有飞秒(10^-18)精度。
支持负值。
DateTime 和 Instant
有两种类型表示时刻或瞬间。
第一种类型是 DateTime<Calendar, Standard>
,它允许使用如 Gregorian
或 Julian
之类的日历轻松创建和操作日期,并且可以灵活地表示不同的时间标准(如 Utc
、Tai
、Tt
、Tcg
和 Tcb
)。此类型内部以紧凑格式存储年、月、日、小时、分钟、秒和飞秒。它的大小为 128 位。DateTime 可以在 i32 范围内有最小和最大年。因此,它不跨越与 Duration 相同的时间跨度。
第二种类型是一个具有不透明实现的 Instant
,大小也为128位。可以从中减去以获得一个 Duration
,并且可以将一个 Duration
添加到或从 Instant
中减去以获得不同的 Instant
。 Instants
可以跨越 Duration
所支持的时间段的全部时长。 Instant
可以转换到和从具有不同 Calendar 和
Stanadard
参数的 DateTime
,提供在这些 Calendar 和
Standard
之间的自动转换。 Instant
还可以转换到和从儒略日。
纪元
提供了一些已知的时间点,例如 JulianPeriod
的开始,或 JulianCalendar
的开始,J1900_0
,Unix
(UNIXTIME 的开始),Y2k
等。
常见问题解答
为什么是飞秒?为什么不是纳秒?
我没有此类精度的个人用途,但数据类型原来是96位的纳秒,而且由于现在的计算机通常是64位的,似乎浪费了一半的字节。所以我扩展了分数秒部分来处理飞秒。
许可证
根据您的选择,许可协议为
- Apache许可证,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确表示,否则您提交的任何旨在包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~48-260KB