Eliminación de zona horaria para DateTime.ParseExact

Estoy tratando de analizar una cadena en una fecha y hora con el siguiente formato:

[Día], [Fecha] [Mes] [Año] [Hora] [am/pm] [zona horaria] (ejemplo:)

"Jueves, 1 de diciembre de 2011 08:30 p. m. EST"

Hice esto usando DateTime.ParseExact con el formato ("dddd, dd MMM yyyy hh: mmtt"). Sin embargo, el timzone me está dando un problema. No hay código para leer la zona horaria escrita de esa manera. De todos modos, no me importa la zona horaria, así que quiero eliminarlo o leerlo, siempre que el parsexact funcione.

Una forma de eliminarlo es eliminarlo de la cadena (usando .Replace); sin embargo, no sé cuántas zonas horarias diferentes producirá la fuente y, de todos modos, creo que una larga línea de reemplazo se ve fea y propensa a errores.

Entonces, ¿hay alguna forma de eliminarlo o leerlo (y luego puedo ignorarlo)?

preguntado el 22 de mayo de 12 a las 10:05

Si una zona horaria siempre está presente, puede cortar la cadena en el último espacio y analizar todo lo demás. -

@dasblinkenlight Hmm, es una muy buena idea. Si hay una forma más limpia de hacerlo, la preferiré, pero por lo demás es una buena solución. -

¿De verdad quieres ignorarlo? Sería más relevante en caso de que pudiera reemplazar el EST con las diferencias (Oh, Dios mío, ahorro de luz diurna) y luego analizar. -

@ V4Vendetta Solo me importa la fecha real, y la posibilidad de perder un día debido a las diferencias de zona horaria es lo suficientemente pequeña como para que no importe. La cuestión es que no es solo EST, podría ser otra cosa, por lo que no puedo ejecutar un reemplazo simple. -

1 Respuestas

Puede escanear la cadena en busca de espacios y cortar todo después del quinto espacio. Si solo hay cuatro espacios, mantenga la cadena completa (esto significa que no hay zona horaria).

Esta respuesta ha sido editada después de un comentario de Jon.

contestado el 23 de mayo de 17 a las 11:05

Probablemente sería mejor cortar en el quinto espacio que en el último. Nunca se sabe cuándo el nombre de la zona horaria podría obtener de alguna manera un componente legible por humanos que contenga espacios. - Jon

@Jon Tiene razón, gracias por una excelente sugerencia: ¡cortar en el quinto espacio (si existe) funcionaría incluso si la zona horaria no está presente! - Serguéi Kalinichenko

(Usé "LastIndexOf(' ')" en su lugar. Dado lo horriblemente sensible que es ParseExact, si hubiera algún cambio en algo, se rompería de todos modos. - Abela

@Aabela: En .NET 4, esto podría ser tan simple como String.Join(" ", "Thursday, 1 Dec 2011 08:30pm EST".Split(' ').Take(5)). - Jon

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.