Мне нужно выполнить проверку на основе строкового значения, будь то дата или десятичное число, но анализ даты всегда возвращает истину для десятичного числа.
string val = "3.5";
DateTime oDate = DateTime.Parse(val);
Возвращает действительную дату 3/5/2019
.
Как проверить строку, чтобы узнать ее действительную дату, когда формат даты неизвестен?
DateTime.ParseExact
если вы знаете, какие форматы он может / должен использоватьTryParseExact
и указать допустимые форматы даты.DateTime.Parse
пробует несколько шаблонов. Если вы хотите распознать только определенные, попробуйте разобрать их специально.Ответы:
Вопрос заключается в том , что
"3.5"
это считается действительной датой (а также в десятичной системе ).Если вы хотите, чтобы десятичный тип всегда «побеждал» (то есть вы не хотите
isDate
иisDecimal
оба должны бытьtrue
), включите десятичную проверку в вашу проверку.Один из способов сделать это - использовать
TryParse
методы (которые возвращают a,bool
если строка может быть проанализирована с типом, и который устанавливаетout
параметр для преобразованного значения), чтобы определить, может ли строка быть преобразована в тип, например:источник
isDate
этоfalse
потому , что она включает в себя проверкуisDecimal
. Разве это не то, что вы просили?Проверьте официальную документацию на ParseExact
Если вы знаете точное представление, вы можете сделать что-то вроде этого:
Если вы этого не знаете, то вы застряли с культурными конвенциями
источник