Kris mentioned this in Ticket #562: tango.text.convert.TimeStamp?.iso8601 only parses one format, "YYYY-MM-DD hh:mm:ss,sss".
That isn't even actually in the standard: there should be a 'T' between the date and the time, not a space.
I hereby submit a 1200-line module with 500 lines of unit tests, based on the ISO 8601:2004 standard (described in a PDF Wikipedia links to), which has functions for parsing almost every date/time format specified.
The ones they don't parse are intervals, durations, and recurring intervals, because I got too lazy to implement them.
The functions (iso8601Time, iso8601Date, and iso8601) update a Date passed. Not a Time, as does the current iso8601, because that's too limited a format. One can always convert to a Time if necessary, keeping in mind that information loss might occur if the Date is outside the interval Time can represent.
In addition, because its dayOfWeek function only works for 1900-3-1 to 2100-2-28, it'd fail by a day or two on ISO week dates outside that interval. (Currently it asserts outside 1901-2099.) If somebody knows a good algorithm which would fix that, by all means submit it.
Another thing it doesn't do is conversions from local time to UTC if the time parsed starts with a 'T'. A comment in doIso8601Time() explains why.
Because the Date struct has no support for time zones, the module just converts times with specified time zones into UTC. This leads to behaviour which may or may not be a bug, as explained in a comment in getTimeZone().
Feel free to ask questions or offer suggestions: the code is IMO mostly clear but there are definitely some places where it could be improved.