Анализ дат без указания всех значений

Я использую даты в произвольной форме как часть синтаксиса поиска. Мне нужно анализировать даты из строк, но сохранять только те части даты, которые фактически указаны. Например, «1 ноября 2010 г.» - это конкретная дата, а «ноябрь 2010 г.» - это диапазон дат от «1 ноября 2010 г.» до «30 ноября 2010 г.».

К сожалению, DateTime.Parse и друзья анализируют эти даты на один и тот же DateTime :

DateTime.Parse("November 1, 2010") // == {11/1/2010 12:00:00 AM}
DateTime.Parse("November, 2010") // == {11/1/2010 12:00:00 AM}

Мне нужно знать, какие части DateTime были фактически проанализированы, а какие были угаданы синтаксическим анализатором. По сути, мне нужно DateTime.Parse ("Ноябрь 2010") == {11 / -1 / 2010 -1: -1: -1} ; Затем я вижу, что часть дня отсутствует, и вычисляю диапазон дат, охватывающий весь месяц.

(Внутри C # есть классы DateTimeParse и DateTimeResult , которые анализируют дату и сохранить именно ту информацию, которая мне нужна, но к тому времени, когда дата вернется в общедоступные интерфейсы, она будет удалена. Я бы предпочел не отражаться в этих классах, если только это не единственный путь.)

Есть ли какой-нибудь способ чтобы получить DateTime.Parse , чтобы сообщить мне, в каком формате он анализирует дату? Или может возвращаемый DateTime содержать заполнители для неопределенных частей? Я также открыт для использования другого парсера дат, но мне бы хотелось, чтобы он был таким же надежным и гибким, как внутренний. Заранее спасибо.

EDIT: I ' Мы также пробовали ParseExact , но перечислить все форматы, которые может обрабатывать Parse , кажется почти невозможным. Parse на самом деле принимает больше форматов, чем возвращает DateTimeFormatInfo.GetAllDateTimePatterns , который является каноническим источником, насколько я могу найти.

14
задан kevingessner 1 March 2011 в 17:25
поделиться