2013-04-09 18 views
8

Jestem całkowicie zaskoczony tym. O ile widzę dokumentację i inne posty na SO, które przeczytałem, muszę powiedzieć, że to powinno działać. Muszę tęsknić za czymś głupim, ale po prostu tego nie widzę.DateTime.ParseExact FormatException String nie został rozpoznany jako ważny DateTime

Otrzymuję wyjątek FormatException z komunikatem "Ciąg nie został rozpoznany jako poprawny obiekt DateTime". na następnej linii kodu:

return DateTime.ParseExact(value, DateFormat, null, 
          DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal); 
  • value jest "11/04/2013"
  • DateFormat jest "dd/MM/yyyy"
  • Obecna kultura jest en-GB
  • Próbowałem różne warianty DateTimeStyles ale bez skutku.

Mój oryginalny zamiarem było dla formatu ddd, dd/MMM/yyyy ale to nie działa albo (wartość w tym przypadku był Tue, 30/Apr/2013)

Próbowałem zostały również zmusza do kultury en-GB, przekazując new CultureInfo("en-GB") zamiast null

również ekstrahowano kod w swoim zastosowaniu konsoli, czy nie różniła się w środowisku (ASP.NET MVC 3)

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var DateFormat = "dd/MM/yyyy"; 
      var value = "30/04/2013"; 
      var culture = new CultureInfo("en-GB"); 
      var result = DateTime.ParseExact(value, DateFormat, culture, 
          DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal); 
      Console.WriteLine("\"{0}\" as \"{1}\" ==> {2}", value, DateFormat, result); 
      Console.ReadKey(); 
     } 
    } 
} 

I nadal daje mi ten sam błąd.

+2

Aplikacja konsoli działa dla mnie. Domyślna kultura na mojej maszynie: "de-DE" –

+0

Dwaj moi koledzy mówią, że działa również na nich. Ale moje maszyny błagają się różnić. Być może moja instalacja jest uszkodzona. Nie wiem jak - inny kod działa poprawnie. –

+2

Jakie są wartości 'Thread.CurrentThread.CurrentCulture' i' Thread.CurrentThread.CurrentUICulture' na twoim komputerze? –

Odpowiedz

7

to działa

string myDate = "30-12-1899 07:50:00:AM"; 
DateTime dt1 = DateTime.ParseExact(myDate, "dd-MM-yyyy hh:mm:ss:tt", 
              CultureInfo.InvariantCulture) 
+0

Ustawienie działającej kultury niezmiennej. Nie mam pojęcia dlaczego, ale zadziałało. –

4
string myDate = "30-12-1899 07:50:00:AM"; 
DateTime dt1 = DateTime.ParseExact(myDate, "dd-MM-yyyy HH:mm:ss:tt", 
              CultureInfo.InvariantCulture); 

Zauważ użycie HH (24-godzinny), zamiast hh (12-godzinny), oraz wykorzystania InvariantCulture ponieważ niektóre kultury korzystania separatory inne niż ciąć.

Na przykład, jeśli kultura jest de-DE, format "dd/MM/rrrr" będzie oczekiwać okresu jako separatora (31.01.2011).

Powiązane problemy