获取第 start/end 周的日期

Get date of start/end of week

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

我有两个问题, 首先,我无法获得 chrono 来解析当年的星期,其次,我无法获得 first/last 星期几。 (这里有很多其他语言的解决方案,但是没有rust)

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

如果我没有正确理解你的问题,你可以这样使用:

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)
}

Playground

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

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

如果需要。

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

use now::DateTimeNow;

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

编辑:

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