Подтвердить что ты не робот

Нужно разбирать dd.MM.yyyy в DateTime, используя TryParse

Мне нужно проанализировать строку DateTime. Строка всегда находится в следующем формате

"10.10.2010" Это означает dd.MM.yyyy, разделенный точками.

Я хочу использовать DateTime.TryParse или любой другой метод. Пожалуйста, предложите.

ОБНОВЛЕНИЕ

Обновлен вопрос. Я просто ищу правильный метод для достижения цели. Не ручной синтаксический анализ

4b9b3361

Ответ 1

TryParse не позволяет указать формат, но вы можете использовать TryParseExact:

DateTime date;
if (DateTime.TryParseExact(text, "dd'.'MM'.'yyyy",
                           CultureInfo.InvariantCulture,
                           DateTimeStyles.None,
                           out date))
{
   // Success
}
else
{
   // Parse failed
}

Обратите внимание, что точка не обязательно должна быть экранирована кавычками, но лично мне нравится помещать любой литеральный текст в кавычки, чтобы убедиться, что он не будет изменен. Это личное предпочтение, хотя вы могли бы просто использовать "dd.MM.yyyy", если хотите.

Аналогично, я указал инвариантную культуру, которую я обычно делаю для фиксированного пользовательского стиля, но вы могли бы использовать ее в текущей культуре или определенной другой культуре, если хотите. При использовании пользовательского стиля (а не стандартного стиля, такого как "длинная дата" ), он, по общему признанию, имеет какое-то значение.

Ответ 2

Используйте метод TryParseExact:

DateTime parsed;
if (DateTime.TryParseExact(yourString, "dd'.'MM'.'yyyy",
    CultureInfo.CurrentCulture, DateTimeStyles.None, out parsed))
{
    // success
}

Ответ 3

Почему бы не использовать ParseExact вместо этого?

var theDate = DateTime.ParseExact("dd.MM.yyyy", yourDateString, CultureInfo.InvariantCulture);

Ответ 4

Бразильский кодек

public static bool IsDateTime(string txtDate)
{
   DateTime tempDate;

   return DateTime.TryParseExact(txtDate,"dd/MM/yyyy",
                                 new CultureInfo("pt-BR"),
                                 DateTimeStyles.None, out tempDate);
}

Ответ 7

попробуйте "ddMMyyy", без "-/."

Ответ 8

Я обнаружил, что jquery datepicker добавит в строку непечатаемые символы. Поэтому, когда вы пытаетесь преобразовать в другой формат, каждый раз он будет выдавать неверную ошибку даты. В моем случае я просто пытался перевести его обратно на отметку времени из любой культуры, в которой находился пользователь в то время. Это несколько хакерский подход, но это сработало для меня.

    static public string ToDigitsOnly(string input)
    {
        Regex digitsOnly = new Regex(@"[^\d]");
        return digitsOnly.Replace(input, "");
    }

    static private DateTime ConvertDateTimeToDate(string dateTimeString, String langCulture)
    {

        System.DateTime result;

        string[] dateString = dateTimeString.Split('/');


        try
        {
            if (langCulture != "en")
            {
                int Year = Convert.ToInt32(ToDigitsOnly(dateString[2]));
                int Month = Convert.ToInt32(ToDigitsOnly(dateString[1]));
                int Day = Convert.ToInt32(ToDigitsOnly(dateString[0]));
                result = new DateTime(Year, Month, Day, 00, 00, 00);
            }
           else
            {
                int Year = Convert.ToInt32(dateString[2]);
                int Month = Convert.ToInt32(dateString[0]);
                int Day = Convert.ToInt32(dateString[1]);
                result = new DateTime(Year, Month, Day, 00, 00, 00);
            }
        }
        catch
        {
            // last attempt 
            result = Convert.ToDateTime(dateTimeString, CultureInfo.GetCultureInfo("en-US"));
        }

        return result;
    }