簡體   English   中英

如何將 excel 日期轉換為年月日組件或 NaiveDate?

[英]How to Convert excel Date into Year, month and date component or NaiveDate?

我正在使用 rust 和 chrono::NaiveDate 來讀取其中包含日期列類型的 Excel 文件。

日期本身的格式為“dd-mm-yyyy”

我可以閱讀 excel 文件,發現我使用的閱讀器 ( https://docs.rs/calamine/latest/calamine/ ) 返回日期的浮點值

Microsoft 站點中的文檔指出該日期從 1900 年 1 月 1 日開始

其中的浮點值對應於這個日期:

日期值(浮動) 實際值(以 dd-mm-yyyy 為單位)
44198 02-01-2021
44199 03-01-2021
44200 04-01-2021
ETC...

基本上我需要一個 function 或箱子,它可以根據我得到的浮點值計算月份、日期和年份。 我不知道該怎么做。

下面是我的代碼

let data_type = calamine::DataType::deserialize(deserializer);
    match data_type {
        Ok(DataType::Error(_)) => {
            Ok(None)
        }
        Ok(DataType::String(date_str)) => {
            let msg = "Failed to convert Date. Wrong format or empty.";
            let val = NaiveDate::parse_from_str(&date_str, DATE_FORMAT)
                .map_err(|_| Error::custom(msg))?;
            Ok(Some(val))
        }
        Ok(DataType::Float(dt)) => {
            println!("this is float!!!");
            println!("dt: {}", dt); // dt is a float number that count the number of days from January 1st 1900
            let year  = ? // what should I do here ?
            let month = ?
            let day = ?
            let val = NaiveDate::from_ymd_opt(year, month, day)
            Ok(None)
        }
        _ => {
            Ok(None)
        }
    }

calamine具有dates功能,添加了返回Option<chrono::NaiveDate>DataType.as_date()方法。 還有DataType.as_datetime()DataType.as_time()

我不知道為什么它沒有記錄,所以小心使用。

至少,方法代碼可以作為您自己實現的起點。

關於我的評論的可能解決方案是:

use chrono::{Duration, NaiveDate};

fn main() {
    let start = NaiveDate::from_ymd_opt(1900, 1, 1).expect("DATE");
    let date = start.checked_add_signed(Duration::days(44198));  // date_value
    println!("{}", date.unwrap());
}

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM