4

我需要chrono::Date今年一周的第一个和最后一个日期。

我有两个问题,首先我无法chrono解析当年的星期,其次我无法获得一周的第一个/最后一个日期。(这里有很多其他语言的解决方案,但不是rust)

TLDR:我需要这样的函数: fn x(week: isize) -> (Date<Local>, Date<Local>)元组是(一周的第一天,一周的最后一天)。

4

2 回答 2

4

如果我正确理解了您的问题,您可以使用以下内容:

use chrono::{NaiveDate, Weekday, Datelike};

fn week_bounds(week: u32) -> (NaiveDate, NaiveDate) {
    let current_year = chrono::offset::Local::now().year();
    let mon = NaiveDate::from_isoywd(current_year, week, Weekday::Mon);
    let sun = NaiveDate::from_isoywd(current_year, week, Weekday::Sun);
    (mon, sun)
}

操场

这是假设 ISO8601 约定(星期一为第一天,星期日为最后一天,以及 ISO 周编号)。它还返回NaiveDate而不是Date<Local>,您可以使用以下方法获得:

let date_time: DateTime<Local> = Local.from_local_datetime(&naive).unwrap();

如果需要的话。

于 2020-10-02T23:21:22.007 回答
4

你可以试试我的 crate https://crates.io/crates/now,它提供了非常方便的方法来获得一周的开始或结束。

use now::DateTimeNow;

let now = Utc::now();
now.beginning_of_week();

编辑:

对于 chrono,您可以使用它datetime.iso_week().week()来获取 iso 周数。或者您可以使用nowvia datetime.week_of_year()which 是预览方法的简单包装器。

于 2021-07-21T10:10:02.413 回答