获取一周的开始/结束日期

Flo*_*rit 9 rust rust-chrono

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

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

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

har*_*mic 9

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

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)
}
Run Code Online (Sandbox Code Playgroud)

操场

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

let date_time: DateTime<Local> = Local.from_local_datetime(&naive).unwrap();
Run Code Online (Sandbox Code Playgroud)

如果需要的话。


Kil*_*han 8

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

use now::DateTimeNow;

let now = Utc::now();
now.beginning_of_week();
Run Code Online (Sandbox Code Playgroud)

编辑:

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