Muszę wykonać sprawdzenie na podstawie wartości ciągu, niezależnie od tego, czy jest to data, czy liczba dziesiętna, ale parsowanie daty zawsze zwraca wartość prawda po przecinku.
string val = "3.5";
DateTime oDate = DateTime.Parse(val);
Zwraca prawidłową datę 3/5/2019
.
Jak zweryfikować ciąg, aby poznać jego prawidłową datę, gdy format daty nie jest znany?
DateTime.ParseExact
jeśli wiesz, jakie formaty może / powinien przyjąćTryParseExact
i określić prawidłowe formaty daty.DateTime.Parse
próbuje wielu wzorów. Jeśli chcesz rozpoznać tylko określone, spróbuj je dokładnie przeanalizować.Odpowiedzi:
Problem polega na tym, że
"3.5"
jest uważana za prawidłową datę (a także dziesiętną).Jeśli chcesz, aby typ dziesiętny zawsze „wygrywał” (tzn. Nie chcesz
isDate
iisDecimal
oba mają byćtrue
), włącz sprawdzanie dziesiętne w walidacji.Jednym ze sposobów na to jest użycie
TryParse
metod (które zwracają a,bool
jeśli ciąg może zostać przeanalizowany z typem i który ustawiaout
parametr na przekonwertowaną wartość), aby ustalić, czy ciąg może zostać przekonwertowany na typ, na przykład:źródło
isDate
jest tofalse
spowodowane tym, że obejmuje on sprawdzenieisDecimal
. Czy nie o to prosiłeś?Sprawdź oficjalną dokumentację dotyczącą ParseExact
Jeśli znasz dokładną reprezentację, możesz zrobić coś takiego:
Jeśli tego nie wiesz, utkniesz w przekonaniach kulturowych
źródło