Ambito:DateTime.TryParseExact lavorare solo in "One Way"
ho cercato di sviluppare una routine di DateTime.Parse super-tolerant
, così ho deciso di dare più "ampiamente usato" formatta una prova per meglio capire il format masks
.
Problema:
Ho definito un formato specifico (String) che uso come myDate.ToString(format)
, e funziona a meraviglia. Il problema è che se ottengo lo stesso String (risultato dell'operazione .ToString(format)
) e lo restituisco a DateTime.TryParseExact (...)
non riesce.
Codice/Test:
System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
// Defining Format and Testing it via "DateTime.ToString(format)"
string format = "MM/dd/yyyy HH:mm:ss tt";
string dtNow = DateTime.Now.ToString (format);
Console.WriteLine (dtNow);
// Trying to Parse DateTime on the same Format defined Above
DateTime time;
if (DateTime.TryParseExact (dtNow, format, provider, System.Globalization.DateTimeStyles.None, out time))
{
// If TryParseExact Worked
Console.WriteLine ("Result: " + time.ToString());
}
else
{
// If TryParseExact Failed
Console.WriteLine ("Failed to Parse Date");
}
uscita è: "Failed to Parse Date".
Domanda:
Perché è possibile utilizzare la stringa format
per formattare una certa data come testo, ma io non è possibile utilizzare lo stesso format
per riportare la stringa su un oggetto data?
EDIT:
ho aggiunto parte del mio metodo per this example, e vorrei sapere perché il metodo "parsedate" non riesce a restituire una data appropriata, dato che la "stringa" è nella giusto formato.
Qual è il tuo 'CurrentCulture'? –
Prova 'string dtNow = DateTime.Now.ToString (formato, provider);' Aggiungi la cultura durante la conversione in stringa. –
Confermato che fallisce con 'pt-BR' (portoghese (Brasile)). –