Я использую даты в свободной форме как часть синтаксиса поиска.Мне нужно разобрать даты из строк, но сохранить только те части даты, которые действительно указаны.Например, «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("November, 2010") == {11/-1/2010 -1:-1:-1}
;Затем я вижу, что часть дня отсутствует, и вычисляю диапазон дат, охватывающий весь месяц.
(Внутренне C # имеет классы DateTimeParse
и DateTimeResult
, которые анализируют дату и сохраняют в точности информациюМне нужно, но к тому времени, когда дата возвращается к общедоступным интерфейсам, она удаляется. Я бы предпочел не отражать эти классы, если только это не единственный маршрут.)
Есть ли какой-то способ получитьDateTime.Parse
чтобы сказать мне, в каком формате он анализировал дату?Или у возвращенного DateTime
могут быть заполнители для неуказанных частей?Я также открыт для использования другого парсера дат, но я бы хотел, чтобы он был таким же надежным и гибким, как и внутренний.Заранее спасибо.
РЕДАКТИРОВАТЬ: Я также пытался ParseExact
, но перечислить все форматы, которые Parse
может обрабатывать кажется почти невозможно.Parse
на самом деле принимает больше форматов, чем возвращается DateTimeFormatInfo.GetAllDateTimePatterns
, что является почти таким же каноническим источником, как я могу найти.