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?
5 answers
Intenta:
DateTime.TryParseExact(txtStartDate.Text, formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out startDate)
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.
- 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í. -
CultureInfo.InvariantCulture
lo que es más probable añadir problema. Así que en lugar de pasar un valorNULL
o poniéndolo enCultureInfo 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 }
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.
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
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");
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