[英]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.