Introducing libiso8601

It’s a Date! In C!

October 20, 2017

Four years ago I needed a library for parsing ISO 8601 dates in C. After I wrote most of it, we ended up going in a different direction. This code has sat on my computer since then. But no more!

This week I polished it up and pushed it to GitHub. The library is fully tested (with >98% code coverage) and handles not only all the ISO 8601 standard formats but many common non-standard variations as well.

Here’s an example of how to use it:

#include <iso8601.h>
#include <assert.h>
#include <string.h>

int main() {
    iso8601_time time = {};
    char str[128] = {};

    iso8601_parse("2010-02-14T13:14:23.123456Z", &time);

    assert(time.year == 2010);
    assert(time.month == 2);
    assert( == 14);
    assert(time.hour == 13);
    assert(time.minute == 14);
    assert(time.second == 23);
    assert(time.usecond == 123456);

    iso8601_unparse(&time, ISO8601_FLAG_NONE, 4, ISO8601_FORMAT_WEEKDATE,
                    ISO8601_TRUNCATE_DAY, sizeof(str), str);

    assert(strcmp(str, "2010-W06-7") == 0);
    return 0;

I’d love to get some review of the API before I release the first version. So if you’re into telling people how bad their code is, please wander this way!

comments powered by Disqus