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.

Share:
16,967
Kaya
Author by

Kaya

WPF Rocks

Updated on June 17, 2022

Comments

  • Kaya
    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
    Kaya over 14 years
    Cheers but the wiki shows both formats
  • Brian Sweeney
    Brian Sweeney over 13 years
    I 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
    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
    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.