¿Cómo tomo la entrada en el formato de fecha y hora?

He escrito un código que toma start_date y end_date del usuario pero está generando un error.
El siguiente es el código:

 from datetime import datetime start_date = datetime.strptime(input('Enter Start date in the format m/d/y'), '%m/%d/%Y') end_date = datetime.strptime(input('Enter End date in the format m/d/y'), '%m/%d/%Y') dates=['4/6/2013', '5/4/2013', '6/26/2013', '7/26/2013', '9/5/2013', '10/7/2013', '10/12/2013', '4/12/2014', '5/10/2014', '6/12/2014', '7/19/2014', '8/15/2014', '9/17/2014', '4/21/2015', '5/28/2015', '6/26/2015'] # this line creates a list of datetime objects from the given strings in list dates dt_dates = [datetime.strptime(date, '%m/%d/%Y') for date in dates] in_between_dates = [] for d in dt_dates: if d >= start_date and d <= end_date: in_between_dates.append(d) print [d.strftime('%m/%d/%Y') for d in in_between_dates] 

y el error aparece después de dar 1/1/2014 como entrada es la siguiente:

 Enter Start date in the format m/d/y1/1/2014 Traceback (most recent call last): File "C:\Users\Ayush\Desktop\UWW Data Examples\new csvs\temp.py", line 9, in  start_date = datetime.strptime(input('Enter Start date in the format m/d/y'), '%m/%d/%Y') TypeError: must be string, not int 

Ya que está usando print statement de print , parece que está usando Python 2.x.

En Python 2.x, input() realidad evalúa el resultado y devuelve, por lo tanto, si ingresa algo como 1/1/2014 o algún número, obtendría un número entero (que en este caso es 1 dividido por 1 dividido por 2014 -> 0 ), no una cadena. Y generalmente es peligroso usar input() , ya que el usuario puede ingresar cualquier cosa y eso sería evaluado.

Utilice raw_input() lugar, para obtener la cadena, ejemplo:

 start_date = datetime.strptime(raw_input('Enter Start date in the format m/d/y'), '%m/%d/%Y') end_date = datetime.strptime(raw_input('Enter End date in the format m/d/y'), '%m/%d/%Y') 

En Python 3.x, se cambió el nombre de raw_input () de Python 2 a input() , por lo que usar input() en Python 3 es lo mismo que usar raw_input() en Python 2.x.

Para Python 2 use raw_input lugar de input . Para Python 3 la input está bien.