2012-06-30 9 views
5

Estoy como atrapado en un problema en el que no puedo analizar la fecha y la hora de una cadena, que estoy leyendo desde un archivo de texto. La cadena que estoy recibiendo es en formato siguiente:Tiempo de fecha del análisis a partir de la cadena de formato ddMMMyyyy hhmm (con Month-Name)

05SEP1998 2400

y yo estoy tratando de analizar la cadena a través del siguiente código:

string dateTimeStr = "05SEP1998 2400" 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy hhmm"; 

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

Pero al analizar, el código anterior lanza FormatException:

String was not recognized as a valid DateTime.

¿Podría alguien por favor h ¿Me puede arreglar este problema?

+0

Sí mismo error en mi extremo para este código. –

+0

DateTime tiene solo 23 horas, no 24. –

Respuesta

1

hh es 12 hora, HH es 24 horas. Sin embargo, debe estar en el rango de 0-23, no 24. Si no se puede cambiar fácilmente cómo se generan esas cadenas de fecha, puede analizar de forma manual:

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); 

Tenga en cuenta que esto va a lanzar excepciones si dateTimeStr no tiene el número correcto de caracteres. Es posible que desee manejar eso mejor.

+0

Me parece que su enfoque es incorrecto. ¿Por qué? Porque en este código por ejemplo '" 05SEP1998 2400 "' usted asume que 24 es la Octava hora del 5 de septiembre. Pero de hecho es la Octava hora del 6 de septiembre. Por lo tanto, la fecha real es '" 06SEP1998 0000 "' –

+0

Es por eso que tengo 'dateTime + = TimeSpan.FromHours (24); '. La fecha del ejemplo se resuelve en '9/6/1998 12:00:00 AM' (o' 06SEP1998 0000'). –

+0

OK. Ahora está claro. –

0

Hay 24 horas en un día. Pero mientras escribimos decimos que es de 0-23. Está dando excepción en formato de horas.

¿Cómo me enteré?

intenté crear un objeto DateTime de su cadena como

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

Se dio error en las horas que Hour. minute and second parameters descrive an un-representable DateTime

Cuestiones relacionadas