optimizing conversion between string and date I was wondering if there was a more efficient way of taking strings that represent dates with the pattern being mmddyy or mmd yy or m d yy and converting them into a DateTime object?

111110 would be 11 11 10

111 10 would be 11 1 10

1 1 10 would be 1 1 10

The spaces are either ' ' or '\0' (the input I am given is not very clean)

This is what I have so far, which works for all cases.

//Converts a given input string into a valid date
private DateTime convertToDateFromString(string dateString)
{
  int length = dateString.Length;
  int month = 1;
  int day = 1;
  int year = 1;
  bool gotMonth = false;
  bool gotDay = false;
  bool gotYear = false;
  char c = ' ';
  char peek = ' ';
  string buffer = "";
  DateTime bufferDate;
  int count = 0;

  try
  {
    for (int i = 0; i &lt; dateString.Length; i++)
    {
      c = dateString[i];
      if ((i + 1) &lt; dateString.Length)
        peek = dateString[i + 1];
      else
        peek = '\0';

      if (c != ' ' &amp;&amp; c != '\0')
      {
        buffer += c;
        count++;
        if ((peek == ' ' || peek == '\0' || count == 2) &amp;&amp; gotMonth == false)
        {
          count = 0;
          gotMonth = true;
          month = int.Parse(buffer);
          buffer = null;
        }
        else if ((peek == ' ' || peek == '\0' || count == 2) &amp;&amp; gotDay == false &amp;&amp; gotMonth == true)
        {
          count = 0;
          gotDay = true;
          day = int.Parse(buffer);
          buffer = null;
        }
        else if ((peek == ' ' || peek == '\0' || count == 2) &amp;&amp; gotYear == false &amp;&amp; gotMonth == true &amp;&amp; gotDay == true)
        {
          count = 0;
          gotYear = true;
          year = int.Parse(buffer);
          buffer = null;

          if (year &gt;= 80 &amp;&amp; year &lt;= 99)
            year += 1900;
          else if (year &gt;= 0 &amp;&amp; year &lt;= 79)
            year += 2000;
        }
      }
    }
    bufferDate = new DateTime(year, month, day);
  }
  catch (System.Exception ex)
  {
    bufferDate = new DateTime(1, 1, 1);
  }

  return bufferDate;
}
Here's a one-liner for you:

    private DateTime convertToDateFromString(string dateString)
    {
        DateTime bufferDate;

        return DateTime.TryParseExact(
            dateString,
            new[] { "MMddyy", "MMd yy", "M d yy" },
            CultureInfo.InvariantCulture,
            DateTimeStyles.None,
            out bufferDate)
            ? bufferDate
            : new DateTime(1, 1, 1);
    }


With more than one line:

    private DateTime convertToDateFromString(string dateString)
    {
        var allowedFormats = new[] { "MMddyy", "MMd yy", "M d yy" };
        DateTime parsedDate;
        var couldParse = DateTime.TryParseExact(
            dateString,
            allowedFormats,
            CultureInfo.InvariantCulture,
            DateTimeStyles.None,
            out parsedDate);

        if (couldParse)
        {
            return parsedDate;
        }

        return new DateTime(1, 1, 1); // or throw an exception
    }