Parse DateTime в С# из странного формата

Если у меня есть строка datetime в странном формате, например YYYY##MM##DD HH**M**SS, как я могу создать новую базу данных datetime? я кое-что прочитал о datetimeformatinfoclass, но не уверен, как заставить его работать.

Ответ 1

Вы можете использовать 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 исправляет эту ситуацию, и я надеюсь, что это сделает разбор и форматирование намного быстрее - но это далеко не так, готовый в данный момент.

Ответ 2

Вы можете использовать DateTime.ParseExact и передать необходимый вам формат.