Parsing ISO 8601 string to DateTime in .NET?
16,967
Solution 1
string txt= "2009-10-08 08:22:02Z";
DateTime output = DateTime.ParseExact(txt, "u", System.Globalization.CultureInfo.InvariantCulture);
The DateTime class supports the standard format string of u for this format
I think for the ISO format (with the T separator), use "s" instead of "u". Or use:
string txt= "2009-10-08 08:22:02Z";
DateTime output = DateTime.ParseExact(txt, new string[] {"s", "u"}, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
to support both formats.
Solution 2
No, it's not ISO 8601. Valid ISO 8601 representation would have T
between time and date parts.
DateTime
can natively handle valid ISO 8601 formats. However, if you're stuck with this particular representation, you can try DateTime.ParseExact
and supply a format string.
Comments
-
Kaya almost 2 years
I have a string, "2009-10-08 08:22:02Z", which is in ISO 8601 format.
How do I use DateTime to parse this format?
-
Kaya over 14 yearsCheers but the wiki shows both formats
-
Brian Sweeney over 13 yearsI was unable to parse my string using either "u" or "s" however replacing the T with a space is easily done. This seems to work. I'm using VB .NET with .NET 2.0.
-
StefanG almost 8 years@romkyns Answer seems correct for me. From your "ISO-8601 standard" doc I read in chapters 3.4.3 and 4.3.2 that the "T" is needed when date and time is shown. See also examples B.1.3. And dates in format as presented in question are handled natively.
-
Roman Starkov almost 8 years@StefanG Hm yeah, the only thing I can find in the spec is that "T" can be omitted by mutual agreement, which is not the same as a space being a valid separator. I've deleted my comment.