Я использую даты свободной формы как часть синтаксиса поиска. Мне нужно анализировать даты из строк, но сохранять только те части даты, которые указаны на самом деле. Например, "ноябрь 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}; Затем я вижу, что часть дня отсутствует и вычисляет диапазон дат, охватывающих весь месяц.
(Internally, С# имеет классы DateTimeParse и DateTimeResult, которые анализируют дату и сохраняют именно ту информацию, которая мне нужна, но к тому времени, когда дата вернется к общедоступным интерфейсам, она была удалена. избегайте отражения в этих классах, если только это не единственный путь.)
Есть ли способ получить DateTime.Parse, чтобы сообщить мне, какой формат он использовал для анализа даты? Или может ли возвращенный DateTime заполнить местами для неуказанных частей? Я также открыт для использования другого синтаксического анализа даты, но я бы хотел, чтобы он был таким же надежным и локальным, как и внутренний. Спасибо заранее.
EDIT: Я также пробовал ParseExact, но перечисление всех форматов, которые может обрабатывать Parse, кажется почти невозможным. Parse фактически принимает больше форматов, чем возвращается DateTimeFormatInfo.GetAllDateTimePatterns, который является как канонический источник, который я могу найти.