2012-03-31 3 views
1

Я нашел пример в msdn для преобразования строки в datetime. Но он не работает, попадает в catch(). Почему этот кодовый блок не работает?String to Datetime не может конвертировать - C#

DateTime dateValue; 
     string dateString = "2/16/2008 12:15:12 PM"; 
     try { 
     dateValue = DateTime.Parse(dateString); 
     Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue); 
     } 
     catch (FormatException) { 
     Console.WriteLine("Unable to convert '{0}'.", dateString); 
     } 

ответ

5

Вы используете то, что идея текущей культуры о формате даты/времени является - и я думаю, что вы в культуре, где на следующий день обычно приходит до месяца.

Если вы знаете формат, я обычно использую инвариантную культуру и TryParseExact - определенно не использования Parse и блок улова; либо используйте TryParseExact или TryParse. В этом случае:

if (DateTime.TryParseExact(dateString, "M/d/yyyy hh:mm:ss tt", 
          CultureInfo.InvariantCulture, 0, out dateValue)) 
{ 
    Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue); 
} 
else 
{ 
    Console.WriteLine("Unable to convert '{0}'.", dateString); 
} 

Если вы не знать формат входного сигнала, но вы знаете, культура использовать, я бы просто использовать DateTime.TryParse с соответствующей культурой.

+0

Я не знал, что культура является влияние на ошибки, Большое спасибо, я получил ответ – Merve

1

Попробуйте использовать ParseExact прохождения соответствующего поставщика формата, как в этом примере:

string dateString = "2/16/2008 12:15:12 PM"; 
    string format = "M/dd/yyyy hh:mm:ss tt "; 

    DateTime dateTime = DateTime.ParseExact(dateString, format, 
     CultureInfo.InvariantCulture);