Разбор строк DateTime - PullRequest
       16

Разбор строк DateTime

3 голосов
/ 25 августа 2009

У меня возникли некоторые трудности при разборе строк DateTime с использованием DateTime.ParseExact.

    DateTime result;
    CultureInfo provider = CultureInfo.InvariantCulture;

    // Parse date-only value with invariant culture.
    //format = "mm/dd/yyyy";
format = "d";
    try
    {

        result = DateTime.ParseExact(data+" 12:00:00 AM", format, provider);
    }

data - строковая переменная, загруженная датами в формате «20.05.2009». Я попытался использовать фальшивое время, просто чтобы посмотреть, сработает ли это, и это не сработало (с тэком или без него). Я также пытался использовать спецификатор формата "g", и он не работал, я всегда получаю исключение, что это недопустимая строка DateTime. Единственные даты, на которые он работает, это как «20.12.2009» (обратите внимание, что 2 цифры в части «ММ»)

Я не могу заставить эту процедуру работать с однозначными месяцами! Собственный пример Microsoft из MSDN:

6/15/2009 1:45:30 PM -> 6/15/2009 (en-US)

и с этим работать не будет. Я просто не понимаю, что я делаю неправильно. Я также попробовал свои собственные спецификаторы формата, такие как "mm / dd / yyyy" и "MM / dd / yyyy", но безрезультатно.

Ответы [ 4 ]

6 голосов
/ 25 августа 2009

Если вы хотите проанализировать DateTime в формате en-US, вы должны указать культуру en-US:

DateTime.ParseExact("6/15/2009", "d", CultureInfo.GetCultureInfo("en-US"));
4 голосов
/ 25 августа 2009

Я думаю, что вы хотите использовать:

format = "M/dd/yyyy";

Обратите внимание только на 1 М.

См. эту статью на MSDN для подтверждения и дополнительной информации.

1 голос
/ 25 августа 2009

ParseExact требует, чтобы вы использовали точный спецификатор длинного формата (например, мм / дд / гггг) вместо просто "d"

0 голосов
/ 25 августа 2009

Символ '/' при использовании в строках формата является просто заполнителем для символа разделения даты, характерного для данной культуры. Если вы хотите, чтобы оно было буквальным, вы должны экранировать его с помощью '\'.

Если я правильно понял вашу проблему, вы можете проанализировать текст с помощью:

DateTime.ParseExact(data, "MM\/dd\/yyyy", CultureInfo.InvariantProvider);
...