2016-03-27 3 views
0

Я начинающий программист, работающий над парсером C# -WPF, который читает строки из документа и создает объекты с несколькими полями, включая «Дата добавления», поле. Проблема: дата находится в нестандартном, испанском формате, и я не могу сделать работу DateTime.ParseExact, как предлагалось мной. Это код:Разбор нестандартной строки date DateTime (ParseExact не работает)

 string input = dateAddedStringSPA; //domingo 2 septiembre 2012, 23:54:20 
     string format = "dddd dd MMMM yyy, HH:mm:ss"; 

     CultureInfo cultureInfo = new CultureInfo("es-ES"); 
     DateTime dateAddedSPA; 

     try 
     { 
      dateAddedSPA = DateTime.ParseExact(input, format, cultureInfo);     
      if (dateAddedSPA == DateTime.MinValue) 
      { 
       clipping.DateAdded = DateTime.Now; /*Added this conditional workaround to avoid an exception if parsing fails (and always fails). While this doesn't work every object will have the same date: current. */ 
      } 

      else 
      { 
       clipping.DateAdded = dateAddedSPA; 
      }    
     } 

     catch (Exception) 
     { 
      throw new Exception("Error encountered while adding date."); 
     }    

Комментарий, который вы можете видеть на стороне входа фактический формат строки, которая выглядит следующим образом. «format» - это моя попытка получить DateTime, чтобы понять это, я также попытался удалить запятую после года, все еще не работал. Я не уверен, что это культура, которая вызывает проблемы, но я боюсь, что мой опыт еще недостаточно, чтобы знать. Дело в том, что синтаксический анализ завершился неудачно, и я установил дату, установленную на 1/1/0001 12:00:00 AM. Любой намек на то, что здесь может произойти?

Заранее спасибо.

+2

Вы хотите «d» вместо «dd» - и вы, вероятно, хотите «yyyy». В этот момент он должен работать. –

+0

Это был Джон, спасибо большое. Теперь он не читает некоторые даты, но, по крайней мере, он читает некоторые другие, и я знаю, в каком направлении я должен руководствоваться. – Edword

ответ

2

Чтобы сделать раствор более «универсальным» вы можете указать несколько форматов и использовать TryParseExact() .NET/C# метод, как показаны в следующей демонстрационном образце фрагменте коды:

CultureInfo cultureInfo = new CultureInfo("es-ES"); 
string[] formats ={"dddd d MMMM yyy, HH:mm:ss", "dddd d MMMM yyy, HH:mm:ss"}; 

string input = "domingo 2 septiembre 2012, 23:54:20"; 
DateTime dt; 
if (DateTime.TryParseExact(input, formats, cultureInfo, DateTimeStyles.None, out dt)); 
{ 
    if (dt<DateTime.Now) 
    Console.WriteLine("OK"); 
    Console.ReadKey(); 
} 

Надеется, что это может помочь.

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