DateTime.TryParseExact () rechazando formatos válidos


Estoy analizando un valor DateTime en una página ASP.NET WebForms y la cadena de fecha sigue siendo rechazada por el método DateTime.TryParseExact() a pesar de que claramente coincide con una de las cadenas de formato suministradas.

Parece que falla en mi máquina de desarrollo en casa, pero funciona en el servidor de producción, por lo que estoy pensando en la configuración de fecha local involucrada, pero este error ocurre incluso cuando proporciono un objeto IFormatProvider (CultureInfo) como parámetro

Aquí está el código:

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;
}

Nota Estoy dando un null FormatProvider en lo anterior, pero el mismo problema ocurre cuando proporciono un objeto CultureInfo como (CultureInfo provider = new CultureInfo("en-US")) para este parámetro.

¿Qué me estoy perdiendo?

Author: Amnesh Goel, 2012-08-17

5 answers

Intenta:

 DateTime.TryParseExact(txtStartDate.Text, formats, 
        System.Globalization.CultureInfo.InvariantCulture,
        System.Globalization.DateTimeStyles.None, out startDate)
 55
Author: Adil Mammadov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-29 17:37:13

Aquí puedes comprobar un par de cosas.

  1. Formatos de fecha que está utilizando correctamente. Puede proporcionar más de un formato para DateTime.TryParseExact. Consulte la lista completa de formatos, disponible aquí.
  2. CultureInfo.InvariantCulture lo que es más probable añadir problema. Así que en lugar de pasar un valor NULL o poniéndolo en CultureInfo provider = new CultureInfo("en-US"), puedes escribirlo como. .

    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
    }
    
 8
Author: Amnesh Goel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-30 14:50:29

Este es el método simple, Use 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);

Esto debería funcionar para usted.

 6
Author: Jidheesh Rajan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 22:53:44
string DemoLimit = "02/28/2018";
 string pattern = "MM/dd/yyyy";
 CultureInfo enUS = new CultureInfo("en-US"); 
 DateTime.TryParseExact(DemoLimit, pattern, enUS, 
                     DateTimeStyles.AdjustToUniversal, out datelimit);

Para más https://msdn.microsoft.com/en-us/library/ms131044 (v=vs.110). aspx

 1
Author: islam elgaidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-05 17:52:00

Prueba C # 7.0

var Dob= DateTime.TryParseExact(s: YourDateString,format: "yyyyMMdd",provider: null,style: 0,out var dt)
 ? dt : DateTime.Parse("1800-01-01");
 1
Author: Waleed A.K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-20 22:11:52