Я использую даты свободной формы как часть синтаксиса поиска. Мне нужно анализировать даты из строк, но сохранять только те части даты, которые указаны на самом деле. Например, «ноябрь 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
есть заполнители для неуказанных частей? Я также открыт для использования другого синтаксического анализа даты, но я бы хотел, чтобы он был таким же надежным и локальным, как и внутренний. Заранее спасибо.
EDIT: Я также пробовал ParseExact
, но перечисление всех форматов, которые может обрабатывать Parse
, кажется почти невозможным. Parse
на самом деле принимает больше форматов, чем возвращается DateTimeFormatInfo.GetAllDateTimePatterns
, который примерно как канонический источник, как я могу найти.
См. Мое редактирование выше. ParseExact оказывается недостаточным для общего синтаксического анализа даты. – kevingessner