rust 如何更新计时DateTime示例中的年份?

q35jwt9p  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(133)

如何更改DateTime<FixedOffset>示例中的年份(来自rust crate chrono)?
也就是说,创建一个DateTime<FixedOffset>的新示例,从旧示例中复制月份和日期。
换句话说,我应该如何完成下面的代码:

fn datetime_set_year(
  datetime: &DateTime<FixedOffset>,
  year: &i32
) -> DateTime<FixedOffset>

代码可以忽略像闰日这样的例外情况(如果可能的话)。

igetnqfo

igetnqfo1#

将传递的DateTime<FixedOffset>示例拆分为Date<FixedOffset>示例和NaiveTime示例,然后FixedOffset.ymd.and_time使用传递的year创建新的DateTime<FixedOffset>示例。
Rust Playground

fn datetime_with_year(datetime: &DateTime<FixedOffset>, year: i32) -> DateTime<FixedOffset> {
    let date: Date<FixedOffset> = datetime.date();
    let time: NaiveTime = datetime.time();
    let fixedoffset: &FixedOffset = datetime.offset();
    match fixedoffset.ymd(year, date.month(), date.day()).and_time(time) {
        Some(datetime_) => {
            eprintln!("fixedoffset.ymd() Some {:?}", datetime_);
            datetime_
        }
        None => {
            eprintln!("fixedoffset.ymd() None");
            datetime.clone()
        }
    }
}

更新:或使用@Jmb推荐的datetime.with_year(year)
啊!😑

相关问题