Распознавание строки как DateTime
От: doliavlad  
Дата: 20.12.08 20:02
Оценка:
Здравствуйте.

Не знает ли кто-нибудь какой-нибудь .Net библиотеки для парсинга строки в DateTime с заранее неизвестным форматом, чтобы гибко принимала строку? Или какие-нибудь более-менее универсальные RegEx выражения для этого?

Спасибо
.net string datetime
Re: Распознавание строки как DateTime
От: Qbit86 Кипр
Дата: 20.12.08 21:01
Оценка: +1
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);
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Распознавание строки как DateTime
От: S.M  
Дата: 20.12.08 21:07
Оценка:
Здравствуйте, Qbit86, Вы писали:

D>>...строки в DateTime с заранее неизвестным форматом...


Q>9.11.2001 — это 9-ое ноября или 11-ое сентября?


D>>...чтобы гибко принимала строку?


Q>Так что всё-таки придётся требовать от пользователя ввода даты в некотором заранее известном (с точностью до разделителей) формате. Советую использовать «истинно программистский» стандарт даты/времени ISO 8601, и просить пользователя вводить данные в лексикографическом формате. В этом случае стандартные функции DateTime.Parse() и DateTime.TryParse() должны нормально работать:


Лучше задать шаблоны дат самостоятельно и использовать DateTime.ParseExact и DateTime.TryParseExact.
Re: Распознавание строки как DateTime
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 20.12.08 21:09
Оценка:
Здравствуйте, doliavlad, Вы писали:

D>Не знает ли кто-нибудь какой-нибудь .Net библиотеки для парсинга строки в DateTime с заранее неизвестным форматом, чтобы гибко принимала строку? Или какие-нибудь более-менее универсальные RegEx выражения для этого?


Если формат задается во время выполнения, но ты можешь узнать в каких позициях расположены месяц, год, и т.д., то поможет DateTime.ParseExact.

Вот пример:

DateTime dt = DateTime.ParseExact(@"12.02.03 2007.09.30", @"H.m.s yyyy.M.dd", null);


Подробнее см. MSDN.
Re[2]: Распознавание строки как DateTime
От: doliavlad  
Дата: 21.12.08 13:35
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST>Здравствуйте, doliavlad, Вы писали:


D>>Не знает ли кто-нибудь какой-нибудь .Net библиотеки для парсинга строки в DateTime с заранее неизвестным форматом, чтобы гибко принимала строку? Или какие-нибудь более-менее универсальные RegEx выражения для этого?


ST>Если формат задается во время выполнения, но ты можешь узнать в каких позициях расположены месяц, год, и т.д., то поможет DateTime.ParseExact.


ST>Вот пример:


ST>
ST>DateTime dt = DateTime.ParseExact(@"12.02.03 2007.09.30", @"H.m.s yyyy.M.dd", null);
ST>


ST>Подробнее см. MSDN.


Дата берется с интернет форумов, т.е. дата может быть в совершенно разном формате и нужна какая-то библиотека, которая могла бы вытащить эту дату из маленького куска текста:
Например, "Posted: Wed Nov 19, 2003 5:11 pm" или "Saturday, October 25, 2008 1:42 PM" или "12/20/2008 1:31 PM"
Re[3]: Распознавание строки как DateTime
От: S.M  
Дата: 21.12.08 14:02
Оценка:
Здравствуйте, 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 — это какая дата?
Если список форумов известен заранее, то можно для каждого описать шаблон даты и времени. В противном случае придется писать код который определит этот шаблон на основе анализа некоторого набора дат. Готовых решений для подобного анализа я не встречал, но думаю, что написать его не составит труда.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.