#define _GNU_SOURCE
#include <stdio.h>
#include <time.h>
#include <string.h>
static int
is_valid_iso8601_date_value(char *in)
{
struct tm result;
char **f;
char *ret;
char *formats[] = {
"%Y",
"%Y-%m",
"%y-%m",
"%Y-%m-%d",
"%y-%m-%d",
"%Y%m%d",
"%y%m%d",
"%Y-%m-%d %T",
"%y-%m-%d %T",
"%Y%m%d%H%M%S",
"%y%m%d%H%M%S",
"%Y-%m-%dT%T",
"%y-%m-%dT%T",
"%Y-%m-%dT%TZ",
"%y-%m-%dT%TZ",
"%Y-%m-%d %TZ",
"%y-%m-%d %TZ",
"%Y%m%dT%TZ",
"%y%m%dT%TZ",
"%Y%m%d %TZ",
"%y%m%d %TZ",
NULL
};
memset(&result
, 0, sizeof(result
));
for (f = formats; f && *f; f++)
{
ret = strptime(in, *f, &result);
if (ret && *ret == '\0')
return 1;
}
return 0;
}
int main(void) {
char date_str[] = "2010-01-01T01:01:01Z";
if (is_valid_iso8601_date_value(date_str))
{
printf("%s is a valid iso8601 date!", date_str
); return 0;
}
else
{
printf("%s is not a valid iso8601 date!", date_str
); return 1;
}
}
I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RhdGljIGludAppc192YWxpZF9pc284NjAxX2RhdGVfdmFsdWUoY2hhciAqaW4pCnsKICAgIHN0cnVjdCB0bSByZXN1bHQ7CiAgICBjaGFyICoqZjsKICAgIGNoYXIgKnJldDsKICAgIGNoYXIgKmZvcm1hdHNbXSA9IHsKICAgICAgICAiJVkiLAogICAgICAgICIlWS0lbSIsCiAgICAgICAgIiV5LSVtIiwKICAgICAgICAiJVktJW0tJWQiLAogICAgICAgICIleS0lbS0lZCIsCiAgICAgICAgIiVZJW0lZCIsCiAgICAgICAgIiV5JW0lZCIsCiAgICAgICAgIiVZLSVtLSVkICVUIiwKICAgICAgICAiJXktJW0tJWQgJVQiLAogICAgICAgICIlWSVtJWQlSCVNJVMiLAogICAgICAgICIleSVtJWQlSCVNJVMiLAogICAgICAgICIlWS0lbS0lZFQlVCIsCiAgICAgICAgIiV5LSVtLSVkVCVUIiwKICAgICAgICAiJVktJW0tJWRUJVRaIiwKICAgICAgICAiJXktJW0tJWRUJVRaIiwKICAgICAgICAiJVktJW0tJWQgJVRaIiwKICAgICAgICAiJXktJW0tJWQgJVRaIiwKICAgICAgICAiJVklbSVkVCVUWiIsCiAgICAgICAgIiV5JW0lZFQlVFoiLAogICAgICAgICIlWSVtJWQgJVRaIiwKICAgICAgICAiJXklbSVkICVUWiIsCiAgICAgICAgTlVMTAogICAgfTsKCiAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOwoKICAgIGZvciAoZiA9IGZvcm1hdHM7IGYgJiYgKmY7IGYrKykKICAgIHsKICAgICAgICByZXQgPSBzdHJwdGltZShpbiwgKmYsICZyZXN1bHQpOwogICAgICAgIGlmIChyZXQgJiYgKnJldCA9PSAnXDAnKQogICAgICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4odm9pZCkgewoJCgljaGFyIGRhdGVfc3RyW10gPSAiMjAxMC0wMS0wMVQwMTowMTowMVoiOwoJCiAgICBpZiAoaXNfdmFsaWRfaXNvODYwMV9kYXRlX3ZhbHVlKGRhdGVfc3RyKSkKICAgIHsKICAgIAlwcmludGYoIiVzIGlzIGEgdmFsaWQgaXNvODYwMSBkYXRlISIsIGRhdGVfc3RyKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgIAlwcmludGYoIiVzIGlzIG5vdCBhIHZhbGlkIGlzbzg2MDEgZGF0ZSEiLCBkYXRlX3N0cik7CgkJcmV0dXJuIDE7CiAgICB9Cn0K