1 个不稳定版本

0.1.0 2022年1月18日

#299日期和时间

MIT/Apache

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>,它允许使用如 GregorianJulian 之类的日历轻松创建和操作日期,并且可以灵活地表示不同的时间标准(如 UtcTaiTtTcgTcb)。此类型内部以紧凑格式存储年、月、日、小时、分钟、秒和飞秒。它的大小为 128 位。DateTime 可以在 i32 范围内有最小和最大年。因此,它不跨越与 Duration 相同的时间跨度。

第二种类型是一个具有不透明实现的 Instant,大小也为128位。可以从中减去以获得一个 Duration,并且可以将一个 Duration 添加到或从 Instant 中减去以获得不同的 InstantInstants 可以跨越 Duration 所支持的时间段的全部时长。 Instant 可以转换到和从具有不同 CalendarStanadard 参数的 DateTime,提供在这些 CalendarStandard 之间的自动转换。 Instant 还可以转换到和从儒略日。

纪元

提供了一些已知的时间点,例如 JulianPeriod 的开始,或 JulianCalendar 的开始,J1900_0Unix(UNIXTIME 的开始),Y2k 等。

常见问题解答

为什么是飞秒?为什么不是纳秒?

我没有此类精度的个人用途,但数据类型原来是96位的纳秒,而且由于现在的计算机通常是64位的,似乎浪费了一半的字节。所以我扩展了分数秒部分来处理飞秒。

许可证

根据您的选择,许可协议为

贡献

除非您明确表示,否则您提交的任何旨在包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~48-260KB