获取第 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)
}
这是假设 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
,它是预览方法的简单包装器。
我需要 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)
}
这是假设 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
,它是预览方法的简单包装器。