2015-06-05 2 views
0

У меня есть старый сценарий VB, который был преобразован для запуска в VB .NET давным-давно, это беспорядок, но я не могу получить разрешение переписать его еще.DateTime.TryParse возвращает неверный ответ (IMO)

В нем есть функция, которая берет строку и пытается правильно ее обработать на основе ее содержимого.

Первоначально она была написана как:

Public Shared Function fx(ByVal _str As String) As String 
    If IsDate(_str) Then 
     'Dates have to be formated just right for MySQL to accept them 
     fx = DatePart("yyyy", _str) & "-" & DatePart("m", _str) & "-" & DatePart("d", _str) 
    ElseIf IsNumeric(_str) Then 
     'Numbers go in just fine 
     fx = _str 
    ElseIf Len(_str) > 0 Then 
     'If it's not a date and not a number then treat it as a text field and filter it so that MySQL will take it 
     _str = Trim(_str) 'First trim off any leading and trailing spaces 
     _str = Replace(_str, "\", "\\") 'Change all \ to \\ 
     _str = Replace(_str, "'", "''") 'Change all ' to ''   
     fx = _str 
    Else 
     fx = "" 
    End If 
End Function 

Моя проблема возникает, когда я использую проход FX значение «11,16» и он говорит: «О, да, это дата - 2015/11/16»

Я пробовал использовать success = DateTime.TryParse(_str,tempDate), но он ведет себя одинаково.

Каков наилучший способ сделать это, если _str, передаваемый в может быть чем угодно от пустой строки до даты до суммы в долларах на адрес улицы? Очевидным является переписать вызывающий код, но с устаревшим кодом, который не очень практичен. Любое предложение оценили.

Спасибо!

+4

Вы попробовали 'TryParseExact'? – OneFineDay

+2

Я бы использовал 'TryParseExact' и поставлял массив форматов, которые составляют приемлемый' DateTime' –

+0

. Вы можете попробовать проверить IsNumeric перед IsDate – Joe

ответ

0

Ответ Andrew Whitaker TryParseExact и массив форматов даты - лучший ответ на мою конкретную ситуацию.

Смежные вопросы