10 个版本

0.1.5 2022年3月11日
0.1.4 2020年9月17日
0.1.3 2020年7月1日
0.1.2 2019年5月3日
0.0.1 2016年9月11日

#146日期和时间

Download history 23/week @ 2024-03-11 14/week @ 2024-03-18 52/week @ 2024-04-01 23/week @ 2024-04-08 22/week @ 2024-04-15 16/week @ 2024-04-22 1/week @ 2024-04-29 32/week @ 2024-05-13 67/week @ 2024-05-20 81/week @ 2024-05-27 66/week @ 2024-06-03 50/week @ 2024-06-10 71/week @ 2024-06-17 73/week @ 2024-06-24

261 次每月下载
fluxcap 中使用

MIT 许可证

345KB
1.5K SLoC

文档

克诺诺斯是一个计算日期/时间的工具。它旨在为像“六月的第二个星期一是什么时候?”或“过去二月的第三个星期日前一天是什么?”这样的问题提供一个具体的日期。

为了回答这些问题,kronos 创建了 TimeSequence 迭代器。这些是过去和未来的无限序列,你可以将它们固定在特定的时间点,并得到结果时间的 Range

示例

首先定义一个代表所有 星期一TimeSequence。然后使用它来获取从特定 t0 时间点开始的未来所有星期一的迭代器。

// Reference time: Tuesday, 5th Feb 2019
let t0 = chrono::NaiveDate::from_ymd(2019, 2, 5)
  .and_hms(0, 0, 0);

// A sequence for *Mondays*
let mondays = kronos::Weekday(1);

// First Monday after t0 reference time
mondays.future(&t0).next()

范围

上一个示例将返回一个 Range,它代表一个开放的时间区间 [start, end)。范围还有一个 Grain,它指定了起始和结束时间的分辨率。

范围的示例可以是 2018 年 8 月 26 日。

  • 它的分辨率是 Grain::Day,
  • 开始于 2018/08/26 00:00:00,
  • 结束于 2018/08/27 00:00:00。

组合 TimeSequence

基本序列

一些简单的 TimeSequence 可以几乎从无到有地构建。例如

  • Weekday(2) 代表星期二的序列。
  • Month(6) 代表所有六月的序列。
  • Grains(Grain::Day) 一个遍历天数的序列。

复合序列

通过组合其他序列可以创建更复杂的 TimeSequence。例如

  • NthOf(2, Weekday(1), Month(6)) 创建了一个“六月第二个星期一”的序列。
  • LastOf(1, Weekend, Grains(Grain::Year)) 表示“年度最后一个周末”。
  • Intersect(Weekday(1), NthOf(28, Grains(Grain::Day), Grains(Grains::Month))) 表示“所有星期一的28日”。

其他组合允许并集、交集、区间、异常等。请查看每个模块的测试,了解如何使用它们的示例。

参考

依赖

~1MB
~18K SLoC