Вы можете использовать DateTime.ParseExact или DateTime.TryParseExact для данных, в которых вы не уверены. Например:
using System;
class Test
{
static void Main()
{
string formatString = "yyyy'##'MM'##'dd' 'HH'*'mm'*'ss";
string sampleData = "2010##02##10 07*22*15";
Console.WriteLine(DateTime.ParseExact(sampleData,
formatString,
null));
}
}
Кавычки в строке формата не обязательны - это тоже будет работать:
string formatString = "yyyy##MM##dd HH*mm*ss";
Однако использование кавычек означает, что вы явно указываете, что символы между кавычками должны использоваться буквально, а не как символы шаблона - так что если вы измените «#» на «/», то версия с использованием кавычек определенно будет используйте "/", тогда как версия без будет использовать специфическое для культуры значение.
null
в вызове ParseExact
означает «использовать текущую культуру» - в этом случае вряд ли что-то изменится, но обычно полезной альтернативой является CultureInfo.InvariantCulture
.
К сожалению, нет способа заставить BCL проанализировать строку формата и сохранить информацию; Мой собственный проект Noda Time исправляет эту ситуацию, и я надеюсь, что он сделает синтаксический анализ и форматирование намного быстрее - но в данный момент он далек от готовности к производству.