В python, как проверить, действительна ли дата?

Я создаю своего рода веб-приложение для календаря

Я создал следующую форму в HTML

  • Как получить текущее время в Python
  • Python: «глобальное имя« время »не определено»
  • Инициализировать объект datetime с секундами с эпохи
  • вычитание времени python
  • смещение времени питона
  • Как получить текущее время Великобритании в Google App Engine
  • <form action='/event' method='post'> Year ("yyyy"): <input type='text' name='year' /> Month ("mm"): <input type='text' name='month' /> Day ("dd"): <input type='text' name='day' /> Hour ("hh"): <input type='text' name='hour' /> Description: <input type='text' name='info' /> <input type='submit' name='submit' value='Submit'/> </form> 

    Вход пользователя будет отправлен на сервер вихревой системы

    Мне интересно, есть ли способ проверить, является ли введенная пользователем дата действительной датой?

    Очевидно, я мог бы написать множество утверждений if, но есть ли встроенная функция, которая может проверить это?

    благодаря

  • Как добавить часы к текущему времени в python
  • Измерение прошедшего времени с помощью модуля времени
  • Анализатор времени на естественном языке
  • Сравнение перечня списков и явных циклов (3 генератора массива быстрее, чем 1 для цикла)
  • Верхний предел в Python time.sleep ()?
  • Вычисление разницы во времени
  • 6 Solutions collect form web for “В python, как проверить, действительна ли дата?”

    Вы можете попробовать сделать

     import datetime datetime.datetime(year=year,month=month,day=day,hour=hour) 

    (месяц = ​​2 имеет максимум 28 на не високосные годы, 29 в противном случае, другие месяцы имеют максимум 30 или 31 день) (выдает исключение ValueError при ошибке)

    Кроме того, вы можете попытаться сравнить его с некоторыми здравомыслящими верхними / нижними границами. напр .:

     datetime.date(year=2000, month=1,day=1) < datetime.datetime(year=year,month=month,day=day,hour=hour) <= datetime.datetime.now() 

    Соответствующие верхние и нижние границы здравомыслия зависят от ваших потребностей.

    edit: помните, что это не обрабатывает определенные даты, которые могут быть недействительны для вашего приложения (минимальный день рождения, праздники, вне рабочего времени и т. д.).

    Вы можете попробовать использовать datetime и обрабатывать исключения для принятия правильной / недействительной даты: Пример: http://codepad.org/XRSYeIJJ

     import datetime correctDate = None try: newDate = datetime.datetime(2008,11,42) correctDate = True except ValueError: correctDate = False print(str(correctDate)) 

    Использовать datetime

    например.

     >>> from datetime import datetime >>> print datetime(2008,12,2) 2008-12-02 00:00:00 >>> print datetime(2008,13,2) Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> print datetime(2008,13,2) ValueError: month must be in 1..12 

    Вы можете попробовать использовать datetime и обрабатывать исключения, чтобы определить действительную / недействительную дату:

     import datetime def check_date(year, month, day): correctDate = None try: newDate = datetime.datetime(year, month, day) correctDate = True except ValueError: correctDate = False return correctDate #handles obvious problems print(str(check_date(2008,11,42))) #handles leap days print(str(check_date(2016,2,29))) print(str(check_date(2017,2,29))) #handles also standard month length print(str(check_date(2016,3,31))) print(str(check_date(2016,4,31))) 

    дает

     False True False True False 

    Это улучшение ответа DhruvPathak и имеет больше смысла в качестве редактирования, но оно было отклонено как « Это изменение предназначалось для ответа на автора сообщения и не имеет смысла в качестве редактирования. Оно должно быть написано как комментарий или ответ ".

    Вот решение, использующее время.

      время импорта
     def is_date_valid (год, месяц, день):
         this_date = '% d /% d /% d'% (месяц, день, год)
         пытаться:
             time.strptime (this_date, '% m /% d /% Y)
         кроме ValueError:
             return False
         еще:
             return True
    

    Итак, вот мое хакерское решение для исправления недействительных дат. Это предполагает, что пользователь отправляется из общей html-формы, которая предоставляет дни 1-31 в качестве параметров. Основная проблема заключается в том, что пользователи предоставляют день, который не существует в течение месяца (с 31 сентября)

     def sane_date(year, month, day): # Calculate the last date of the given month nextmonth = datetime.date(year, month, 1) + datetime.timedelta(days=35) lastday = nextmonth.replace(day=1) - datetime.timedelta(days=1) return datetime.date(year, month, min(day, lastday.day)) class tests(unittest.TestCase): def test_sane_date(self): """ Test our sane_date() method""" self.assertEquals(sane_date(2000,9,31), datetime.date(2000,9,30)) self.assertEquals(sane_date(2000,2,31), datetime.date(2000,2,29)) self.assertEquals(sane_date(2000,1,15), datetime.date(2000,1,15)) 
    Python - лучший язык программирования в мире.