2013-08-22 7 views
7

Mam format daty/czasu, na przykład: "1-Mar-13 92230" Według this document i this link format jest następujący: „d-MMM-rr Hmmss”, ponieważ:Data i czas konwersji w C# - DateTime.ParseExact() nie działa zgodnie z oczekiwaniami

Day is single digit, 1-30 
Month is 3 letter abbreviation, Jan/Mar etc. 
Year is 2 digits, eg 12/13 
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09) 
Minute is standard (eg 01, 52) 
Second is standard (eg 30, 02) 

próbuję uruchomić następujący kod w moim programie, ale wciąż otrzymuję błąd „Ciąg nie został rozpoznany jako prawidłowy element DateTime”.

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture); 

Proszę, pomogę, nie jestem zbyt obeznana z konwersjami DateTime, ale nie widzę tutaj, gdzie się tu nie udałem. Dzięki!

AKTUALIZACJA: Czy to dlatego, że nie można przeanalizować czasu bez dwukropków? (Np 1-Mar-13 09:22:30 pobiera analizowany, ale mam zewnętrznego źródła danych, które byłyby niemożliwe do przerobienia z Hmmss H: mm: ss)

Odpowiedz

4

Można ustalić datę:

var parts = "1-Mar-13 92230".Split(' '); 

if (parts[1].Length == 5) 
{ 
    parts[1] = "0" + parts[1]; 
} 

var newDate = parts[0] + " " + parts[1]; 

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss", System.Globalization.CultureInfo.CurrentCulture); 
+0

To działa dla mnie. Przetestowano z datą/czasem w pytaniu oraz "1-mar-13 102230". Działa we wszystkich przypadkach. Co najważniejsze, jest to wygodne, o ile nie modyfikuje danych źródłowych (np. Dodawanie spacji itp.). Dzięki! – John

4

Od msdn:

Jeśli format jest niestandardowym wzorcem formatu, który nie zawiera daty ani separatorów czasu (takich jak "yyyyMMdd HHmm"), użyj niezmiennej kultury dla parametru dostawcy i najszerszej formy każdego niestandardowego specyfikatora formatu . Na przykład, jeśli chcesz określić godziny w formacie , podaj szerszy formularz, "HH", zamiast węższego formularza, "H".

więc można spróbować:

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture); 
+0

to nadal daje wyjątek „Ciąg nie został rozpoznany jako prawidłowy element DateTime”. – Rex

+0

I drugi komentarz Rexa. Z jakiegoś powodu nadal otrzymuję wyjątek – John

+0

To nie jest poprawne, wyjątek nadal istnieje – Anand

0

Twój godziny minuty i sekundy muszą być rozdzielone, ponieważ nie są one coraz wyróżnia.

string input = "1-Mar-13 9 23 30"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss", System.Globalization.CultureInfo.CurrentCulture); 
1

Twój ciąg wejściowy musi mieć następujący format

string input = "1-Mar-13 092330"; 

Jeśli wrócisz do linku, to mówi

H 24-hour clock hour (e.g. 19) 

Teraz H wynosi 24 godzin, powinien on być reprezentowany z prowadzeniem 0. Jeśli nie wyobrażasz sobie, jak poradzisz sobie z przypadkami godzin większych niż 9, które są dwucyfrowe.

Jeśli nie, należy oddzielić godzinę i minuty i sekundy.

string input = "1-Mar-13 9 2330"; 

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture); 
Powiązane problemy