Estoy escribiendo una aplicación de lector de RSS y Correo en C# (técnicamente MonoTouch).Robusta biblioteca de analizador de DateTime para .NET
Me he encontrado con el problema de analizar DateTime
s. Veo una gran cantidad de variación en la forma en fechas se presentan en la naturaleza y han comenzado a escribir una función como esta:
static string[] DateTimeFormats = new string[] {
"ddd, d MMM yyyy H:mm:ss \"GMT+00:00\"",
"d MMM yyyy H:mm:ss \"EST\"",
"yyyy-MM-dd\"T\"HH:mm:ss\"Z\"",
"ddd MMM d HH:mm:ss \"+0000\" yyyy",
};
public static DateTime ParseTime(string timeStr) {
var r = DateTime.MinValue;
var styles = DateTimeStyles.AdjustToUniversal |
DateTimeStyles.AllowWhiteSpaces;
if (DateTime.TryParse(timeStr,
CultureInfo.InvariantCulture,
styles,
out r)) {
return r;
}
else {
if (DateTime.TryParseExact(timeStr,
DateTimeFormats,
CultureInfo.InvariantCulture,
styles,
out r)) {
return r; // BUGGY! Ignores time zone!!
}
}
Console.WriteLine ("BAAAAAAAAAAAAD");
return DateTime.MinValue;
}
Este, bueno, me enferma. Dos puntos. (1) Es una tontería de mi parte pensar que realmente puedo recopilar una lista de formatos que cubra todo lo que hay por ahí. (2) ¡Está mal! Tenga en cuenta que estoy tratando una hora de fecha EST como UTC (ya que .NET parece ajeno a las zonas horarias).
Estoy buscando una biblioteca existente (solo fuente) que se sabe que maneja muchos de estos formatos.
Además, me gustaría seguir usando UTC DateTimes a lo largo de mi código, así que cualquier biblioteca sugerida debería poder producir DateTimes.
¿Hay algo por el estilo como este?
Actualización Parece que no estaba claro en mi solicitud. Estoy buscando una biblioteca que conozca muchas de estas cadenas de formato wild. DateTime.Parse/DateTime.TryParse solo conoce un par de formatos, y ciertamente no entienden los husos horarios (puede ver que ya lo estoy usando). Necesito algo más poderoso que DateTime.Parse/DateTime.TryParse.
Actualización 2 Todo el mundo estaba pensando en el hecho de que estaba usando Parse en lugar de TryParse. He cambiado el código. Pero sigue siendo incorrecto e incompleto.
Eventualmente tiempo Noda pueden proporcionar algunos de esta funcionalidad: http://code.google.com/p/noda-time/ – TrueWill
Puede que quiera ver [datetime-tryparse-all-possible-type-of-dates] (http://stackoverflow.com/questions/2326127/datetime-tryparse-all-possible-type-of- fechas) – nawfal