如何为Chrono NaiveDate添加月份?

问题描述

我尝试创建日期选择器,并且需要在日期月份之间导航


let current = NaiveDate::parse_from_str("2020-10-15","%Y-%m-%d").unwrap();

如何生成打击日期

2020-11-15

解决方法

可以解析该字符串,并使用month + 1

来创建另一个日期。
use chrono::{NaiveDate,Datelike};

fn main() {

    let naive = NaiveDate::parse_from_str("2020-10-15","%Y-%m-%d").unwrap();
    let another = NaiveDate::from_ymd(naive.year(),naive.month() + 1,naive.day());
    
    println!("{:?}",another);
}

playground

通过添加Duration::days(integer)还有另一种选择,但是一个人需要知道一个月中有多少天。

use chrono::{ NaiveDate,Duration};

fn main() {

    let naive = NaiveDate::parse_from_str("2020-10-15","%Y-%m-%d").unwrap() ;
    let another = naive + Duration::days(31);
    
    println!("{:?}",another);
}

playground

这是在第12个月之后添加月份的简单条件分支:

use chrono::{NaiveDate,Datelike};

fn main() {

    let naive = NaiveDate::parse_from_str("2020-12-15","%Y-%m-%d").unwrap();
    let mut y = naive.year();
    let mut m = naive.month();
    let d = naive.day();
    if naive.month() == 12 {
        y += 1;
        m = 1;
    } else {
        m += 1;
    }
    let another = NaiveDate::from_ymd(y,m,d);
    
    println!("{:?}",another);
}

playground