Während mit DateTime.ParseExact Formatierungsprobleme zu kämpfen, habe ich beschlossen, ParseExact die aus DateTime.ToString(), so sagen zu füttern:Warum kann DateTime-Ausgabe von DateTime.ParseExact nicht analysiert werden?
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));
}
Dies ist die Ausgabe:
[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
Was tun Ich muss tun, dass ParseExact die benutzerdefinierten Formatzeichenfolgen parsen wird? Ist es falsch zu erwarten, dass DateTime die eigene Ausgabe basierend auf derselben Formatzeichenfolge aufnehmen kann?
Es ist nicht die Ursache für den Fehler ist, aber zur Info: Sie eine bestimmte Kultur sind vorbei für ToString die Standardkultur parsen, sondern verwenden.Dies selbst würde aufgrund der Ländereinstellung Probleme verursachen. Aber ich habe getestet, und das ist nicht das * einzige * Problem. –
@Marc: Ich testete es auch, indem ich die gleiche Kultur in beide Methoden auch übertrug. Ich habe auch "CultureInfo.InvariantCulture" für Kick-n-Grins vergeblich versucht. –