voglio formattare un digitato in tempo per una norma specifica:FormatException con TryParseExact
private String CheckTime(String value)
{
String[] formats = { "HH mm", "HHmm", "HH:mm", "H mm", "Hmm", "H:mm", "H" };
DateTime expexteddate;
if (DateTime.TryParseExact(value, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out expexteddate))
return expexteddate.ToString("HH:mm");
else
throw new Exception(String.Format("Not valid time inserted, enter time like: {0}HHmm", Environment.NewLine));
}
Quando l'utente è del tipo: "09 00", "0900", "09:00", "9 00 "," 9:00 "
Ma quando l'utente lo digita come: "900"
o "9"
il sistema non riesce a formattarlo, perché? Sono formati predefiniti che ho insegnato.
string str = CheckTime("09:00"); // works
str = CheckTime("900"); // FormatException at TryParseExact
Il segnaposto H può abbinare due cifre pure, necessario per analizzare ore> = 10. Così 900 partite Hmm con H = 90. Kaboom. –
@HansPassant: ma '90' è'> 24', quindi non è necessario trattare le prime due cifre come ore. È una limitazione di 'TryParseExact'? Presumo che questo sia in qualche modo correlato alla mia stessa domanda che ho chiesto di recente: http://stackoverflow.com/questions/21902722/datetime-parseexact-with-7-digits-one-or-tue-digit-month –
Prima volta Vedo questa domanda, immediatamente @TimSchmelter [domanda] (http://stackoverflow.com/q/21902722/447156) mi è venuta in mente .. Secondo me, i metodi di analisi non sanno cosa fanno in tale casi .. –