Вам нужно использовать DateTime.ParseExact
:
DateTime date = DateTime.ParseExact(text, "yyyyMMdd",
CultureInfo.InvariantCulture);
Тогда, если вы хотите, чтобы это было "13-Mar-2012", вам нужно:
string reformatted = date.ToString("dd-MMM-yyyy");
... при желании можно передать любую культуру, которую вы хотите использовать для названий месяцев и т. Д.
(Другой альтернативой является использование моего Noda Time , которое позволяет вам анализировать это как просто локальная дата , не беспокоясь о том, какое время она будет использовать, часовые пояса и т. Д.)