2012-03-01 9 views
7

Dziś mam naprawdę dziwny problem.DateTime.Parse kończy się niepowodzeniem na dzień dzisiejszy (01 marca 2012 r.)! o_0

Spróbuj wykonać ten kod C#:

class Program 
{ 
    static void Main(string[] args) 
    { 

     string yesterdayString = (DateTime.Now - TimeSpan.FromDays(1)).ToString("R"); 
     string nowString = DateTime.Now.ToString("R"); 

     DateTime.Parse(yesterdayString); 
     DateTime.Parse(nowString); 

     DateTime.Parse("Wed, 29 Feb 2012 18:05:49 GMT"); // this is what i have in yesterdayString 
     DateTime.Parse("Thu, 01 Mar 2012 18:05:40 GMT"); // this is what i have in nowString 
    } 
} 

Oczywiście dostaniesz problem tylko na dzisiaj. Dodałem ostatnie dwa polecenia, aby poinformować Cię o problemie. Jutro iw całym marcu DateTime.Parse rzuci wyjątek FormatException (ciąg nie został rozpoznany jako poprawny obiekt DateTime).

Dlaczego?

+1

Ten kod działa, gdy go uruchomić poprzez LINQPad. – DaveShaw

+1

Działa dobrze dla mnie na .NET 4.0, FWIW. –

+0

Twój kod działa dla mnie. – BlueM

Odpowiedz

2

Powiedziałbym, że znalazłeś błąd. To powinno działać:

// 
var spanish = CultureInfo.GetCultureInfo("es"); 
var date = DateTime.Parse(DateTime.Now.ToString("R", spanish), spanish); 

lub włoski nadal rzuca ...

var italian = CultureInfo.GetCultureInfo("it"); 
var date = DateTime.Parse(DateTime.Now.ToString("R", italian), italian); 
+1

Wygląda na to, że parser datetime nie odpowiada włoskiemu i hiszpańskiemu marcowemu miesiącowi. Twoje rozwiązanie nie działa dla mnie .. dam mi rozwiązanie = D .. dzięki. ps .. Nie mogę dać mi odpowiedzi .. więc dam ci podpowiedź: DateTime.Parse (nowString, CultureInfo.GetCultureInfo ("en")); –

+0

@ user846168: Nie miało to być rozwiązanie, ale raczej odpowiedź "za duży na komentarz". Dlatego oznaczyłem go jako CW. –

2
+0

To jest to, miałem ten sam problem dzisiaj. Prawdopodobnie dlatego, że w języku hiszpańskim, March = Marzo, więc ze standardem RFC1123 .net nie może rozpoznać "Mar", gdy jesteś w "es" locale i nie wiedzą, jak zrobić obejście tego błędu, więc zamknęli go jako "wygrany" t fix "(* facepalm *) – dbalboa

Powiązane problemy