获取开始/结束日期

时间:2020-10-02 16:16:07

标签: rust rust-chrono

我需要从当年开始的一周的第一个和最后一个日期的chrono::Date

我有两个问题, 首先,我无法获取chrono来解析当年的一周,其次,我无法获取一周的第一个/最后一个日期。 (这里有很多其他语言的解决方案,但不生锈)

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

2 个答案:

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

Playground

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

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

如果需要。