Mientras que luchan con problemas de formato DateTime.ParseExact, me decidieron alimentar a la ParseExact hacia fuera puesto de DateTime.ToString(), así:¿Por qué no puede DateTime.ParseExact analizar el resultado de DateTime?
DateTime date2 = new DateTime(1962, 1, 27);
string[] expectedFormats = { "G", "g", "f", "F", "D", "d", "M/d/yyy", "MM/dd/yyy", "MM-dd-yyy", "MMM dd, yyy", "MMM dd yyy", "MMMM dd, yyy", "MMMM dd yyy" };
bool parsed = false;
foreach (string fmt in expectedFormats)
{
try
{
DateTime dtDateTime = DateTime.ParseExact(date2.ToString(fmt), fmt, new CultureInfo("en-US"));
parsed = true;
}
catch (Exception)
{
parsed = false;
}
Console.WriteLine("[{0}] {1}", parsed,date2.ToString(fmt));
}
Ésta es la salida:
[True] 1/27/1962 12:00:00 AM
[True] 1/27/1962 12:00 AM
[True] Saturday, January 27, 1962 12:00 AM
[True] Saturday, January 27, 1962 12:00:00 AM
[True] Saturday, January 27, 1962
[True] 1/27/1962
[False] 1/27/1962
[False] 01/27/1962
[False] 01-27-1962
[False] Jan 27, 1962
[False] Jan 27 1962
[False] January 27, 1962
[False] January 27 1962
Qué hacer Tengo que hacerlo para que ParseExact analice las cadenas de formato personalizadas. ¿Me equivoco al esperar que DateTime pueda ingerir su propia salida basándose en la misma cadena de formato?
No es la causa del error, pero para información: estás pasando a una cultura específica para analizar, pero utilizando la referencia cultural predeterminada para ToString.Esto en sí mismo causaría problemas debido a la configuración regional. Pero lo he probado, y este no es el * único * problema. –
@Marc: Lo probé pasando la misma cultura en ambos métodos también. También probé 'CultureInfo.InvariantCulture' para kicks-n-grins en vano. –