Не знает ли кто-нибудь какой-нибудь .Net библиотеки для парсинга строки в DateTime с заранее неизвестным форматом, чтобы гибко принимала строку? Или какие-нибудь более-менее универсальные RegEx выражения для этого?
D>...строки в DateTime с заранее неизвестным форматом...
9.11.2001 — это 9-ое ноября или 11-ое сентября?
D>...чтобы гибко принимала строку?
Так что всё-таки придётся требовать от пользователя ввода даты в некотором заранее известном (с точностью до разделителей) формате. Советую использовать «истинно программистский» стандарт даты/времени ISO 8601, и просить пользователя вводить данные в лексикографическом формате. В этом случае стандартные функции DateTime.Parse() и DateTime.TryParse() должны нормально работать:
var iso8601 = DateTime.Parse("2008-09-23T05:36:32.1234");
Console.WriteLine(iso8601);
var iso8601simple = DateTime.Parse("2008-09-23 05:36");
Console.WriteLine(iso8601simple);
var utc = DateTime.Parse("2008/03/19 19:57Z");
Console.WriteLine(utc);
var yetAnother = DateTime.Parse("2008.12.20");
Console.WriteLine(yetAnother);
var withMonth = DateTime.Parse("2008 Nov 20");
Console.WriteLine(withMonth);
var withMonthRus = DateTime.Parse("2008 Сентябрь 20");
Console.WriteLine(withMonthRus);
Здравствуйте, Qbit86, Вы писали:
D>>...строки в DateTime с заранее неизвестным форматом...
Q>9.11.2001 — это 9-ое ноября или 11-ое сентября?
D>>...чтобы гибко принимала строку?
Q>Так что всё-таки придётся требовать от пользователя ввода даты в некотором заранее известном (с точностью до разделителей) формате. Советую использовать «истинно программистский» стандарт даты/времени ISO 8601, и просить пользователя вводить данные в лексикографическом формате. В этом случае стандартные функции DateTime.Parse() и DateTime.TryParse() должны нормально работать:
Лучше задать шаблоны дат самостоятельно и использовать DateTime.ParseExact и DateTime.TryParseExact.
Здравствуйте, doliavlad, Вы писали:
D>Не знает ли кто-нибудь какой-нибудь .Net библиотеки для парсинга строки в DateTime с заранее неизвестным форматом, чтобы гибко принимала строку? Или какие-нибудь более-менее универсальные RegEx выражения для этого?
Если формат задается во время выполнения, но ты можешь узнать в каких позициях расположены месяц, год, и т.д., то поможет DateTime.ParseExact.
Здравствуйте, SergeyT., Вы писали:
ST>Здравствуйте, doliavlad, Вы писали:
D>>Не знает ли кто-нибудь какой-нибудь .Net библиотеки для парсинга строки в DateTime с заранее неизвестным форматом, чтобы гибко принимала строку? Или какие-нибудь более-менее универсальные RegEx выражения для этого?
ST>Если формат задается во время выполнения, но ты можешь узнать в каких позициях расположены месяц, год, и т.д., то поможет DateTime.ParseExact.
ST>Вот пример:
ST>
Дата берется с интернет форумов, т.е. дата может быть в совершенно разном формате и нужна какая-то библиотека, которая могла бы вытащить эту дату из маленького куска текста:
Например, "Posted: Wed Nov 19, 2003 5:11 pm" или "Saturday, October 25, 2008 1:42 PM" или "12/20/2008 1:31 PM"
Здравствуйте, doliavlad, Вы писали:
D>Дата берется с интернет форумов, т.е. дата может быть в совершенно разном формате и нужна какая-то библиотека, которая могла бы вытащить эту дату из маленького куска текста: D>Например, "Posted: Wed Nov 19, 2003 5:11 pm" или "Saturday, October 25, 2008 1:42 PM" или "12/20/2008 1:31 PM"
Выше Qbit86 уже отметил основную проблему парсинга даты. Например 01/02/03 — это какая дата?
Если список форумов известен заранее, то можно для каждого описать шаблон даты и времени. В противном случае придется писать код который определит этот шаблон на основе анализа некоторого набора дат. Готовых решений для подобного анализа я не встречал, но думаю, что написать его не составит труда.