3 个版本
0.1.2 | 2024年7月8日 |
---|---|
0.1.1 | 2024年7月8日 |
0.1.0 | 2024年7月8日 |
#148 在 日期和时间
被 rapid_solve 使用
40KB
851 行
RapidTime
该包定义了两种类型:DateTime
和 Duration
,它们在组合优化问题中用于建模时间。
- 最小单位是秒。
- 除了实际的时间外,
DateTime::Earliest
和DateTime::Latest
分别代表正无穷和负无穷。 - 除了有限持续时间外,
Duration::Infinity
代表无限持续时间。 Durations
可以加到或从DateTimes
中减去。Durations
可以相互加或减,并实现Sum
。DateTimes
可以相互减去,以产生一个Duration
。Durations
和DateTimes
是完全排序的。(它们实现了Ord
。)- 不允许有负持续时间。
- 这两种类型都是
Copy
和Clone
。
用法
- 基本用法
use rapid_time::{DateTime, Duration};
let tour_start = DateTime::new("2024-02-28T08:00:00");
let tour_length = Duration::new("100:00:00");
let tour_end = DateTime::new("2024-03-03T12:00:00");
assert_eq!(tour_start + tour_length, tour_end);
assert_eq!(tour_end - tour_start, tour_length);
assert_eq!(tour_end - tour_length, tour_start);
// Note that 2024 is a leap year.
# use rapid_time::{DateTime, Duration};
assert_eq!(DateTime::Earliest + Duration::new("10000:00:00"), DateTime::Earliest);
assert_eq!(DateTime::new("0000-01-01T00:00:00") + Duration::Infinity, DateTime::Latest);
assert_eq!(DateTime::Latest - DateTime::Earliest, Duration::Infinity);
assert_eq!(DateTime::Earliest + Duration::Infinity, DateTime::Latest);
- 更多
Duration
# use rapid_time::{DateTime, Duration};
assert_eq!(Duration::new("1:00:00") + Duration::from_seconds(120), Duration::new("1:02:00"));
assert_eq!(Duration::new("100:00:00").in_sec().unwrap(), 100 * 3600);
assert_eq!(Duration::from_iso("P10DT2H00M59S").in_min().unwrap(), 10 * 24 * 60 + 2 * 60);
// Duration::from_seconds(10) - Duration::from_seconds(20); // panics
- 更多
DateTime
# use rapid_time::{DateTime, Duration};
assert_eq!(DateTime::new("2024-02-28T08:30").as_iso(), "2024-02-28T08:30:00");
// DateTime::new("2024-01-01T08:00") - DateTime::new("2024-01-01T09:00"); // panics