我需要从当年开始的一周的第一个和最后一个日期的chrono::Date
。
我有两个问题,
首先,我无法获取chrono
来解析当年的一周,其次,我无法获取一周的第一个/最后一个日期。 (这里有很多其他语言的解决方案,但不生锈)
TLDR:我需要这样的功能:
fn x(week: isize) -> (Date<Local>, Date<Local>)
,其中元组为(一周的第一天,一周的最后一天)。
答案 0 :(得分:2)
你可以试试我的箱子 https://crates.io/crates/now ,它提供了非常方便的方法来开始或结束一周。
use now::DateTimeNow;
let now = Utc::now();
now.beginning_of_week();
编辑:
对于chrono,您可以使用datetime.iso_week().week()
来获取iso 周数。或者您可以通过 now
使用 datetime.week_of_year()
,这是一个简单的预览方法包装器。
答案 1 :(得分:1)
如果我正确理解了您的问题,则可以使用以下方式:
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();
如果需要。