Deserialize date in YAML



examples/yaml/load-datetime-field/data.yaml
title: Some title
start: 2025-02-08T10:00:00-08:00

examples/yaml/load-datetime-field/Cargo.toml
[package]
name = "load-datetime-field"
version = "0.1.0"
edition = "2021"

[dependencies]
chrono = { version = "0.4.39", features = ["serde"] }
serde = { version = "1.0.217", features = ["derive"] }
serde_yml = "0.0.12"

examples/yaml/load-datetime-field/src/main.rs
use chrono::{DateTime, Timelike, Utc};

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
struct Event1 {
    title: String,
    start: String,
}

#[derive(Serialize, Deserialize, Debug)]
struct Event2 {
    title: String,
    start: DateTime<Utc>,
}

fn main() {
    let filename = "data.yaml";
    let content = std::fs::read_to_string(filename).expect("File not found");
    let data: Event1 = serde_yml::from_str(&content).expect("YAML parsing error");
    println!("{:?}", data);

    let data: Event2 = serde_yml::from_str(&content).expect("YAML parsing error");
    println!("{:?}", data);
    println!("hour: {}", data.start.hour());
    println!("timezone: {}", data.start.timezone());
}

Event1 { title: "Some title", start: "2025-02-08T10:00:00-08:00" }
Event2 { title: "Some title", start: 2025-02-08T18:00:00Z }
hour: 18
timezone: UTC