我需要chrono::Date
今年一周的第一个和最后一个日期。
我有两个问题,首先我无法chrono
解析当年的星期,其次我无法获得一周的第一个/最后一个日期。(这里有很多其他语言的解决方案,但不是rust)
TLDR:我需要这样的函数:
fn x(week: isize) -> (Date<Local>, Date<Local>)
元组是(一周的第一天,一周的最后一天)。
我需要chrono::Date
今年一周的第一个和最后一个日期。
我有两个问题,首先我无法chrono
解析当年的星期,其次我无法获得一周的第一个/最后一个日期。(这里有很多其他语言的解决方案,但不是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)
}
这是假设 ISO8601 约定(星期一为第一天,星期日为最后一天,以及 ISO 周编号)。它还返回NaiveDate
而不是Date<Local>
,您可以使用以下方法获得:
let date_time: DateTime<Local> = Local.from_local_datetime(&naive).unwrap();
如果需要的话。
你可以试试我的 crate https://crates.io/crates/now,它提供了非常方便的方法来获得一周的开始或结束。
use now::DateTimeNow;
let now = Utc::now();
now.beginning_of_week();
编辑:
对于 chrono,您可以使用它datetime.iso_week().week()
来获取 iso 周数。或者您可以使用now
via datetime.week_of_year()
which 是预览方法的简单包装器。