微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取开始/结束日期

如何解决获取开始/结束日期

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

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

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

解决方法

你可以试试我的箱子 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(),这是一个简单的预览方法包装器。

,

如果我正确理解了您的问题,则可以使用以下方式:

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,Weekday::Sun);
    (mon,sun)
}

Playground

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

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

如果需要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。