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

DateTime.TryParseExact() отклоняет действительные форматы

Я анализирую значение DateTime на странице ASP.NET WebForms, и строка даты продолжает отклоняться методом DateTime.TryParseExact(), даже если она явно соответствует одной из прилагаемых строк формата.

Кажется, что он не работает на моей машине разработки дома, но работает на сервере производства, поэтому я думаю о том, что задействованы локальные параметры даты, но эта ошибка возникает, даже когда я поставляю объект IFormatProvider (CultureInfo) в качестве параметра

Здесь код:

DateTime startDate;
string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
                    "dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy"};

var errStart = row.FindControl("errStartDate"); //my date format error message
if (!DateTime.TryParseExact(txtStartDate.Text, formats, null, DateTimeStyles.None, out startDate))
{
    errStart.Visible = true; //we get here even with a string like "20/08/2012"
    return false;
}
else
{
    errStart.Visible = false;
}

Примечание. Я указываю null FormatProvider в приведенном выше примере , но. Эта проблема возникает, когда я предоставляю объект CultureInfo как (CultureInfo provider = new CultureInfo("en-US")) для этого параметра.

Что мне не хватает?

4b9b3361

Ответ 1

Try:

 DateTime.TryParseExact(txtStartDate.Text, formats, 
        System.Globalization.CultureInfo.InvariantCulture,
        System.Globalization.DateTimeStyles.None, out startDate)

Ответ 2

Это простой метод, используйте ParseExact

CultureInfo provider = CultureInfo.InvariantCulture;
DateTime result;
dateString = "Sun 08 Jun 2013 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
result = DateTime.ParseExact(dateString, format, provider);

Это должно сработать для вас.

Ответ 3

Здесь вы можете проверить несколько вещей.

  • Форматы даты, которые вы используете правильно. Вы можете предоставить более одного формата для DateTime.TryParseExact. Проверьте полный список форматов, здесь.
  • CultureInfo.InvariantCulture, что, скорее всего, добавит проблемы. Поэтому вместо того, чтобы передать значение NULL или на CultureInfo provider = new CultureInfo("en-US"), вы можете записать его как. .

    if (!DateTime.TryParseExact(txtStartDate.Text, formats, 
                    System.Globalization.CultureInfo.InvariantCulture,
                    System.Globalization.DateTimeStyles.None, out startDate))
    {
        //your condition fail code goes here
        return false;
    }
    else
    {
        //success code
    }