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 在 日期和时间
261 次每月下载
在 fluxcap 中使用
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