从日期间隔生成rust中的随机日期

cgvd09ve  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(148)

我想使用rand::StdRng从一个时间间隔中生成一个随机日期。目前我可以像这样生成随机日期:

pub fn random_date(rng: &mut StdRng) -> Date {
    rng.sample(Standard)
}

字符串
但是这种方法生成的任何日期都不在给定的区间内。如何随机生成区间内的日期?比如,我想得到一个从2000到2010的日期。
我用time::Date

i7uaboj4

i7uaboj41#

创建一个接受3个参数的函数:

  • 对随机数生成器的可变引用
  • 开始日期
  • 结束日期

该函数计算日期之间的持续时间(days_in_range),并使用它来限制随机整数rng.gen_range(0..days_in_range)的产生,最后它将该整数添加到开始日期start + Duration::days(random_days),从而产生日期范围内的随机日期。

use chrono::{NaiveDate, Duration};
use rand::Rng;

pub fn random_date_in_range(rng: &mut rand::rngs::ThreadRng, start: NaiveDate, end: NaiveDate) -> NaiveDate {
    let days_in_range = (end - start).num_days();
    let random_days: i64 = rng.gen_range(0..days_in_range);
    start + Duration::days(random_days)
}

字符串

相关问题