#iso-8601 #parser #date-time #winnow

no-std winnow_iso8601

Parsing ISO8601 dates using winnow

5 releases (3 breaking)

0.4.0 Jan 22, 2025
0.3.0 Dec 17, 2024
0.2.1 Dec 15, 2024
0.2.0 Nov 17, 2024
0.1.0 Nov 15, 2024

#344 in Date and time

Download history 182/week @ 2024-11-12 55/week @ 2024-11-19 5/week @ 2024-11-26 21/week @ 2024-12-03 116/week @ 2024-12-10 161/week @ 2024-12-17 2/week @ 2025-01-07 130/week @ 2025-01-21

132 downloads per month
Used in mysql-slowlog-parser

MIT license

155KB
4K SLoC

winnow-iso8601, making parsing ISO8601 dates a breeze

crates.io docs.rs docs

About

This library contains parsers for parsing ISO8601 dates and their various components built off the winnow-datetime parsers

Parsing

Complete

If you have all the data you need, you can just pass along the input directly.

let datetime = opt(datetime)
    .parse_next(&mut "2015-06-26T16:43:23+0200"));

// the above will give you:
Some(DateTime {
    date: Date::YMD {
        year: 2015,
        month: 6,
        day: 26,
    },
    time: Time {
        hour: 16,
        minute: 43,
        second: 23,
        tz_offset_hours: 2,
        tz_offset_minutes: 0,
    },
});

Partial

For partial data the only difference is wrapping input in Partial and handling incomplete errors correctly, which is documented in winnow partial docs.

pub type Stream<'i> = Partial<&'i [u8]>;

let datetime = opt(datetime)
    .parse_next(&mut Stream::new("2015-06-26T16:43:23+0200").as_bytes()));

// the above will give you:
Some(DateTime {
    date: Date::YMD {
        year: 2015,
        month: 6,
        day: 26,
    },
    time: Time {
        hour: 16,
        minute: 43,
        second: 23,
        tz_offset_hours: 2,
        tz_offset_minutes: 0,
    },
});

Contributors

winnow-iso8601 is the fruit of the work of many contributors over the years, many thanks for your help! In particular, thanks to badboy and hoodie for the original iso8601 crate and actually reading the standard.

Documentation

Documentation is online.

License

MIT Licensed. See LICENSE

Dependencies

~1.1–2.2MB
~44K SLoC