Mentre alle prese con problemi di formattazione DateTime.ParseExact, ho deciso di alimentare il ParseExact fuori messo da DateTime.ToString(), in questo modo:Perché DateTime.ParseExact non può analizzare l'output 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));
}
Questa è l'uscita:
[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
Cosa fare Devo fare in modo che ParseExact analizzerà le stringhe di formato personalizzate? Mi sbaglio se DateTime sarà in grado di ingerire il proprio output basato sulla stessa stringa di formato?
E non è la causa del bug, ma per info: si passa una cultura specifica per analizzare, ma utilizzando la lingua predefinita per ToString.Questo stesso causerebbe problemi a causa delle impostazioni locali. Ma ho provato, e questo non è il * solo * problema. –
@Marc: l'ho testato anche passando la stessa cultura in entrambi i metodi. Ho anche provato "CultureInfo.InvariantCulture" per kick-n-grins inutilmente. –