Я использую даты свободной формы как часть синтаксиса поиска. Мне нужно анализировать даты из строк, но сохранять только те части даты, которые указаны на самом деле. Например, "ноябрь 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
, который является как канонический источник, который я могу найти.