Sto scrivendo un'app di lettura RSS e Mail in C# (tecnicamente MonoTouch).Robusta libreria parser DateTime per .NET
Ho incontrato il problema di analizzare DateTime
s. Vedo un sacco di variabilità nel modo in cui date sono presentate nel selvaggio e hanno cominciato a scrivere una funzione come questa:
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;
}
questo, beh, mi fa star male. Due punti. (1) È sciocco da parte mia pensare di poter effettivamente raccogliere una lista di formati che coprirà tutto là fuori. (2) È sbagliato! Si noti che sto trattando una data EST come UTC (dato che .NET sembra ignaro dei fusi orari).
Sto cercando una libreria esistente (fonte solo per favore) che è noto per gestire un sacco di questi formati.
Inoltre, mi piacerebbe continuare a utilizzare UTC DateTimes attraverso il mio codice, quindi qualsiasi libreria suggerita dovrebbe essere in grado di produrre DateTimes.
C'è qualcosa là fuori in questo modo?
Aggiornamento Sembrerebbe che la richiesta non sia chiara. Sto cercando una libreria che conosca molte di queste stringhe di formato selvaggio. DateTime.Parse/DateTime.TryParse conoscono solo un paio di formati, e certamente non capiscono i fusi orari (si vede che lo sto già usando). Ho bisogno di qualcosa di più potente di DateTime.Parse/DateTime.TryParse.
Aggiornamento 2 Tutti si soffermavano sul fatto che stavo usando Parse al posto di TryParse. Ho cambiato il codice. Ma è ancora sbagliato e incompleto.
Alla fine Noda-tempo possono fornire alcune di queste funzionalità: http://code.google.com/p/noda-time/ – TrueWill
Potrebbe voler vedere [datetime-tryparse-all-possible-type-of-dates] (http://stackoverflow.com/questions/2326127/datetime-tryparse-all-possible-type-of- date) – nawfal