Определите, включает ли данная строка даты все три компонента: день, месяц и год.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Определите, включает ли данная строка даты все три компонента: день, месяц и год.

Сообщение Anonymous »

Я пытаюсь определить, включает ли данная строка даты все три компонента: день, месяц и год.
Пример входных данных и ожидаемых выходных данных:
  • "2025-01-01" → Верно (Присутствуют все компоненты)
  • "31 января 2026 г." → Верно (Формат естественного языка со всеми компоненты)
  • "Январь 2026" → False (не указан день)
  • "2026" → False (не указан месяц и день)
    "2025-01" -> Ложь
Подход, который я использую:
Сейчас я использую dateutil.parser.parse для анализа строки даты, а затем проверки допустимости атрибутов года, месяца и дня в результирующем объекте datetime. Однако функция синтаксического анализа заполняет недостающие компоненты значениями по умолчанию, что затрудняет определение того, были ли эти компоненты явно указаны во входной строке. Итак, я написал приведенную ниже логику, чтобы обойти эту проблему.

Код: Выделить всё

def parse_date(date_string):
try:
default_dt1 = datetime(1,1,1)
default_dt2 = datetime(2,2,2)
parsed_date1 = dateutil.parser.parse(date_string,default=default_dt1)
parsed_date2 = dateutil.parser.parse(date_string,default=default_dt2)
if parsed_date1 == parsed_date2:
# print(parsed_date1.month)
return True
return False
except (ValueError,TypeError):
return False
Как это работает:
Даты по умолчанию:

Функция использует две даты по умолчанию: datetime(1, 1, 1) и datetime(2, 2, 2), чтобы заполнить недостающие компоненты при анализе входной строки даты.
Разбор:
Он анализирует строку date_string дважды, используя parser.parse (из модуля dateutil.parser) с двумя разными датами по умолчанию.
Если в строке date_string отсутствуют компоненты (например, день или месяц), синтаксический анализатор .parse будет использовать значения по умолчанию для заполнения пробелов.
Сравнение:

Если оба проанализированных результата одинаковы, это означает, что строка date_string имеет все компоненты, как недостающие компонентов приведет к различиям в двух проанализированных датах из-за разных значений по умолчанию.
Вопрос:

Как я могу надежно проверить, содержит ли строка даты явно все три компоненты, не полагаясь на значения по умолчанию, добавленные dateutil? Есть ли лучший способ добиться этого? Я попытался указать значения по умолчанию как «Нет», но это не работает. к моему удивлению, для этого не существует функции по умолчанию.
Примечание: формат ввода не является единообразным.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -day-month
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»