2016-12-02 9 views
-2

В настоящее время у меня трудно найти, как решить мою проблему, связанную с функцией DateTime.TryPaseDateTime.TryParse() проблема при преобразовании немецкой даты США Дата

 String formattedDateString = String.Empty; 

     // German date dd.mm.yyyy 
     string dateString = "14.03.2016"; 
     DateTimeFormatInfo dateTimeFormat = null; 

     //automatically throws and exception if the locale is not in the correct format 
     CultureInfo fromCulture = new CultureInfo("en-US"); 
     DateTime tryParseDateTime; 


     //automatically throws and exception if the locale is not in the correct format 
     CultureInfo toCulture = new CultureInfo("de-de"); 
     dateTimeFormat = toCulture.DateTimeFormat; 

     // expecting result to fail 
     if (DateTime.TryParse(dateString, fromCulture, DateTimeStyles.None, out tryParseDateTime)) 
     { 
      formattedDateString = tryParseDateTime.ToString("d", dateTimeFormat); 
      Console.WriteLine("success"); 
     } 
     else 
     { 
      Console.WriteLine("Failed"); 
     } 

Так вот в моем коде, я отправив дату немецкого формата, то есть dd.mm.yyyy, и ожидая, что DateTime.TryParse завершится с ошибкой, но поскольку день ниже 12, он предполагает, что имеет месяц и возвращает оператор успеха.

Если я передаю немецкую дату «15.03.2016», это прекрасно работает.

Как я могу решить свою проблему здесь.

Здесь запрашиваемая локаль немецкий

Благодаря

+2

Ну, для начала вы проходите в культуре США, чтобы преобразовать, я полагаю, это должно быть «de-DE»? – DavidG

+0

Голосование закрывается из-за ошибки на стороне OP. – t0mm13b

+1

try [DateTime.ParseExact] (https://msdn.microsoft.com/en-us/library/w2sa9yss (v = vs.110) .aspx) –

ответ

1

Примечание: спрашивающий ожидает, что переход на неудачу с заданной входной формат строки немецкого. Он только хочет, чтобы преобразование преуспеть, когда входная строка НЕ ​​в немецком формате, а в формате США.


Использование DateTime.TryParseExact и передать в ожидаемом формате из исходной культуры.

// German date dd.mm.yyyy 
    string dateString = "01.03.2016"; 

    CultureInfo fromCulture = new CultureInfo("en-US"); 
    DateTime tryParseDateTime; 

    // expecting result to fail 
    if (DateTime.TryParseExact(dateString, fromCulture.DateTimeFormat.ShortDatePattern, fromCulture, DateTimeStyles.None, out tryParseDateTime)) 
    { 
     MessageBox.Show("Success"); 
    } 
    else 
    { 
     MessageBox.Show("Failed"); 
    } 
+0

Это отлично работает. Результат не получается, когда мы имеем шаблон DateTime –