Я пишу приложение для чтения RSS и почты на C # (технически MonoTouch).
Я столкнулся с проблемой парсинга DateTime
s. Я вижу много различий в том, как даты представлены в дикой природе, и я начал писать такую функцию:
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;
}
Это, ну, меня тошнит. Две точки (1) Глупо думать, что я действительно могу собрать список форматов, который охватит все, что есть. (2) Это неправильно! Обратите внимание, что время в формате EST трактуется как UTC (поскольку .NET, похоже, не обращает внимания на часовые пояса).
Я ищу существующую библиотеку (только источник, пожалуйста), которая, как известно, обрабатывает множество этих форматов.
Кроме того, я хотел бы продолжать использовать UTC DateTimes во всем моем коде, чтобы любая предложенная библиотека могла создавать DateTimes.
Есть ли что-нибудь подобное?
Обновление Казалось бы, я неясно в своем запросе. Я ищу библиотеку, которая знает множество этих строк формата wild . DateTime.Parse / DateTime.TryParse знают только пару форматов, и они, конечно, не понимают часовые пояса (вы можете видеть, что я уже использую его). Мне нужно что-то более мощное, чем
DateTime.Parse / DateTime.TryParse.
Обновление 2 Все говорили о том, что я использовал Parse вместо TryParse. Я поменял код. Но это все еще неправильно и неполно.