2010-10-05 10 views
7

Parsuję ciąg znaków, aby przekonwertować go na DateTime. Dostaję w niektórych przypadkach błąd:DateTime.Parse: wyjątek podczas zmiany kultury

String was not recognized as a valid DateTime. 

ja dostaję ten błąd tylko wtedy uruchomić aplikację z komputera znajdującego się w innym kraju niż USA. To, co widzę w ciągu znaków, to 09/20/2010 14:11 iw tym przypadku otrzymuję wyjątek. Jeśli mam wartość taką jak: 10/05/2010 12:54 Nie otrzymuję wyjątku. Przypuszczam, że to jest dzień, w którym jest 20, a ten komputer jest w Europie, więc uważa, że ​​20 to miesiąc. Problemem jest to, że zmuszają go do być en-US:

CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy hh:mm", new CultureInfo("en-US")); 

Ponieważ otrzymuję wyjątek Przypuszczam pewien, że to jest właściwe podejście.

Każdy pomysł, jak parsować ciąg znaków w sposób, który działa bez względu na kulturę, z której korzystam na komputerze?

+0

Jeśli wiesz, że format zawsze będzie taki, możesz użyć DateTime.Parse (value, CultureInfo.InvariantCulture); Pod względem daty i czasu InvariantCulture jest mniej więcej równoznaczne z en-US. BTW, jeśli parsujesz to w ten sposób, .Net nie będzie w stanie określić strefy czasowej i faktycznie potraktuje twój DateTime jako "nieokreślony lokalny", co może prowadzić do błędów. Jeśli wiesz, że źródło znajduje się w UTC, użyj tego: DateTime.Parse (value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); –

Odpowiedz

10

Powinieneś użyć "HH: mm" zamiast "hh: mm" - "HH" jest dla zegara 24-godzinnego; "hh" oznacza zegar 12-godzinny. Zatem 14 nie jest poprawną wartością "hh".

Spodziewam się, że ten sam problem będzie występował nawet na maszynie w USA ... może zdarzyło się, że na maszynach w Stanach Zjednoczonych pojawiły się tylko przed godziną 13:00 ze względu na różnice w strefie czasowej?

+0

Myślę, że to był problem. Teraz działa. – tony

+0

Wielkie dzięki za szybką pomoc Tony – tony

Powiązane problemy