Разобрать DateTime в c # из странного формата - PullRequest
15 голосов
/ 10 февраля 2010

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

Ответы [ 2 ]

27 голосов
/ 10 февраля 2010

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

7 голосов
/ 10 февраля 2010

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

...