-1

How can I turn an ISO date (20140312120000 or 2014-03-12 12:00:00) into "March 12th, 2014 12:00:00"?.

Thanks.

4 Answers4

0

You can't parse it with the normal DateTime.Parse method,

DateTime.ParseExact(date, "yyyyMMdd''HHmmss", CultureInfo.InvariantCulture)
Sajeetharan
  • 216,225
  • 63
  • 350
  • 396
0
 DateTime thisDate1 = new DateTime(2014, 3, 12);
Console.WriteLine("Today is " + thisDate1.ToString("MMMM dd, yyyy") + ".");
// The example displays the following output: 
//    Today is March 12, 2011. 
fuzzybear
  • 2,325
  • 3
  • 23
  • 45
0

I solved it like so: DateTime.Parse(isodate).ToString("MMMM dd, yyyy HH:mm:ss").

0

What you want to do is to parse the input string as a DateTime and then convert it to the form you want. The ParseExact and ToString methods will do the job.

public string MyFromat(string s)
{
    var inputForms = new string[] 
    { 
       "yyyyMMdd''HHmmss", 
       "yyyy-MM-dd' 'HH':'mm':'ss"
    };
    var time = DateTime.ParseExact(s, inputForms, , CultureInfo.InvariantCulture);
    return time.ToString(""MMMM dd, yyyy HH':'mm':'dd", , CultureInfo.InvariantCulture);
}

Your two example forms are not ISO. If you want to parse ISO date times, then use DateTimeOffset for representing the time and use these input forms:

        static readonly string[] Iso8061DateTimeForms = new string[]
        {
               "yyyyMMdd'T'HHmmss",
               "yyyyMMdd'T'HHmmss'Z'",
               "yyyyMMdd'T'HHmmsszzz",
               "yyyyMMdd'T'HHmmss'.'fffffff",
               "yyyyMMdd'T'HHmmss'.'fffffff'Z'",
               "yyyyMMdd'T'HHmmss'.'fffffffzzz",
               "yyyy'-'MM'-'dd'T'HH':'mm':'ss",
               "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'",
               "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz",
               "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffff",
               "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffff'Z'",
               "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz",
        };

The full implementation for parsing an ISO 8061 time is:

 public static DateTimeOffset ParseIso8061Time(string s)
 {
    var styles = DateTimeStyles.AllowWhiteSpaces |
        (s.EndsWith("Z") 
           ? DateTimeStyles.AssumeUniversal 
           : DateTimeStyles.AssumeLocal);
    return DateTimeOffset.ParseExact(s, Iso8061DateTimeForms,
        CultureInfo.InvariantCulture, styles);
 }
Richard Schneider
  • 34,944
  • 9
  • 57
  • 73