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