Chcę sformatować wpisany w czasie określonym standardzie:FormatException z 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));
}
Gdy użytkownik wpisze to jak: "09 00", "0900", "09:00", „9 00 "," 9:00 "
Ale gdy użytkownik wpisze takie hasło jak: "900"
lub "9"
system nie sformatuje go, dlaczego? Są to domyślne formaty, których nauczyłem się.
string str = CheckTime("09:00"); // works
str = CheckTime("900"); // FormatException at TryParseExact
H zastępczy można dopasować dwie cyfry, a także niezbędne do analizowania godzin> = 10. Więc 900 mecze Hmm z H = 90. Kaboom. –
@HansPassant: ale '90' to'> 24', więc nie trzeba traktować pierwszych dwóch cyfr jako godzin. Czy to ograniczenie "TryParseExact"? Zakładam, że jest to w jakiś sposób związane z moim własnym pytaniem, które ostatnio zadałem: http://stackoverflow.com/questions/21902722/datetime-parseexact-with-7-digits-one-or-two-digit-month –
Po raz pierwszy Widzę to pytanie, natychmiast przyszło mi do głowy także @TimSchmelter [pytanie] (http://stackoverflow.com/q/21902722/447156). Moim zdaniem metody parsowania nie wiedzą, co robią w takim przypadki .. –