The man page for mktime et. al. show the range as being 0 - 23. That
is why 24 is out of range and produces a lint warning. I think that
the standard to look to here is the ISO C standard, which I don't have
handy, not ISO 8601.
It's just a lint warning, and the C mktime() function should do the
right thing anyway.
But I'll admit that I may be standing on thin ice. :-)
As to why 60 is allowed for minutes, that's probably a mistake -
60 is allowed for seconds to accomodate leap seconds. I should
fix that.