Skip to main content

easyofd_core/model/
creation_date.rs

1//! OFD 创建/修改日期。
2//!
3//! 对应 Java: org.ofdrw.core.basicStructure.ofd.docInfo.CT_DocInfo (CreationDate/ModDate)
4
5use chrono::NaiveDateTime;
6
7/// 日期时间值(ofd:CreationDate / ofd:ModDate)。
8///
9/// 对应 Java: ofdrw CreationDate/ModDate 字段。
10/// 支持 ISO 格式 "2024-05-31T00:00:00" 和日期格式 "2024-05-31"。
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct CreationDate {
13    /// 解析后的日期时间值。
14    pub value: NaiveDateTime,
15}
16
17impl CreationDate {
18    /// 从 `NaiveDateTime` 创建。
19    pub fn new(value: NaiveDateTime) -> Self {
20        Self { value }
21    }
22
23    /// 从 ISO 字符串解析。
24    ///
25    /// 支持 "2024-05-31T00:00:00" 和 "2024-05-31" 格式。
26    pub fn parse(s: &str) -> Option<Self> {
27        let value = NaiveDateTime::parse_from_str(s, "%Y-%m-%dT%H:%M:%S")
28            .or_else(|_| {
29                chrono::NaiveDate::parse_from_str(s, "%Y-%m-%d")
30                    .map(|d| d.and_hms_opt(0, 0, 0).expect("00:00:00 是有效时间"))
31            })
32            .ok()?;
33        Some(Self { value })
34    }
35
36    /// 转换为 ISO 字符串。
37    #[must_use]
38    pub fn to_iso(&self) -> String {
39        self.value.format("%Y-%m-%dT%H:%M:%S").to_string()
40    }
41}