2012-06-30 10 views
5

Sono in qualche modo bloccato con un problema in cui non sono in grado di analizzare la data e l'ora da una stringa, che sto leggendo da un file di testo. La stringa che sto ottenendo è nella seguente formato:Parse time time from string of format ddMMMyyyy hhmm (with Month-Name)

05SEP1998 2400

e sto cercando di analizzare la stringa attraverso il seguente codice:

string dateTimeStr = "05SEP1998 2400" 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy hhmm"; 

var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider); 

Ma durante l'analisi, il codice sopra getta un FormatException:

String was not recognized as a valid DateTime.

Could favore qualcuno h mi hai risolto questo problema?

+0

Sì stesso errore alla mia fine per questo codice. –

+0

DateTime ha solo 23 ore non 24. –

risposta

1

hh è di 12 ore, HH è di 24 ore. Tuttavia, deve essere nel range 0-23, non 24. Se non è possibile cambiare facilmente come quei stringhe di data vengono generati, è possibile analizzare manualmente:

string dateTimeStr = "05SEP1998 2400"; 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy HHmm"; 
int HourPos = Format.IndexOf("HH"); 
var hour = dateTimeStr.Substring(HourPos, 2); 
bool addDay = hour == "24"; 
if (addDay) 
    dateTimeStr = dateTimeStr.Substring(0, HourPos) + "00" + dateTimeStr.Substring(HourPos + 2); 
var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider); 
if (addDay) 
    dateTime += TimeSpan.FromHours(24); 

Si noti che questo getterà le eccezioni se dateTimeStr non ha il numero giusto di caratteri. Potresti volerlo meglio.

+0

Trovo che il tuo approccio sia sbagliato. Perché? Perché in questo codice per esempio '" 05SEP1998 2400 "' supponi che 24 sia la 0a ora del 5 settembre ma in realtà è la 0a ora del 6 settembre. Quindi la data reale è "06SEP1998 0000" ' –

+0

Ecco perché ho" dateTime + = TimeSpan.FromHours (24); '. La data di esempio si risolve in "9/6/1998 12:00:00 AM" (o "06SEP1998 0000'). –

+0

OK. Adesso è chiaro. –

0

Ci sono 24 ore al giorno. Ma mentre scriviamo diciamo che è da 0-23. Sta dando un'eccezione al formato delle ore.

Come ho scoperto?

Ho cercato di creare un oggetto DateTime dalla stringa come

DateTime dt = new DateTime(1998, 9, 5, 24, 0, 0); 

Ha dato errore Ore che Hour. minute and second parameters descrive an un-representable DateTime