gpt4 book ai didi

time - Rust 中每 M 个月的第 N 天

转载 作者:行者123 更新时间:2023-12-03 11:31:34 24 4
gpt4 key购买 nike

我一直在努力寻找一个 crate 来处理复杂的时间序列。使用优秀kronos crate ,我可以创建TimeSequence就像 NthOf 的“每个月的第 10 天”或“每年的第一个星期一”和 Grains() .

// 10th day of every month
tenth_day = NthOf(10, Grains(Grain::Day), Grains(Grain::Month));

// 1st Monday of every year
first_monday = Nth(1, Weekday(1), Grains(Grain::Year));

但我想为更复杂的 TimeSequence 做这个s,就像“每隔一个月的第 27 天”。有 Grain::QuarterGrain::Half分别为每 3 个月和 6 个月的枚举变体,但这些变体是硬编码的,不会推广到不平分一年的月份,例如每 5 个月。

有没有办法让这些更复杂 TimeSequencekronos ?或者我可以使用另一个 crate 来解决这个问题吗?

最佳答案

discussing with kronos' maintainer 之后, 使用 step_by函数或 step_by 方法可以完成这项工作。

这是一个在 Grains 对象上使用 step_by 方法的例子。

use chrono::Datelike;

let mut every_3months_from_next_march_iter = Grains(Grain::Month)
.future(&t0_april)
.skip_while(|r| r.start.date().month() != 3)
.step_by(3);
assert_eq!(
every_3months_from_next_march_iter.next().unwrap(),
Range{
start: dt(2019, 3, 1),
end: dt(2019, 4, 1), grain: Grain::Month
}
);

这里是一个使用 step_by 函数的例子。

use kronos::{step_by, Grains, Grain, NthOf};

let third_day_every_5_months = NthOf(
3,
Grains(Grain::Day),
step_by(Grains(Grain::Month), 5)
);

关于time - Rust 中每 M 个月的第 N 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62947343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com