poner - ¿Cómo puedo comparar una fecha y una fecha y hora en Python?
obtener el dia de la semana en python (4)
Aquí hay un pequeño fragmento de código que estoy tratando de ejecutar:
>>> from datetime import *
>>> item_date = datetime.strptime(''7/16/10'', "%m/%d/%y")
>>> from_date = date.today()-timedelta(days=3)
>>> print type(item_date)
<type ''datetime.datetime''>
>>> print type(from_date)
<type ''datetime.date''>
>>> if item_date > from_date:
... print ''item is newer''
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can''t compare datetime.datetime to datetime.date
Parece que no puedo comparar la fecha y los valores de fecha y hora. ¿Cuál sería la mejor manera de comparar estos? ¿Debo convertir la fecha y hora a la fecha o viceversa? ¿Cómo puedo convertir entre ellos.
(Una pequeña pregunta, pero parece ser un poco confuso.)
Aquí hay otra toma, "robada" de un comentario en el que no se puede comparar datetime.datetime con datetime.date ... convierta la fecha en datetime utilizando esta construcción:
datetime.datetime(d.year, d.month, d.day)
Sugerencia:
from datetime import datetime
def ensure_datetime(d):
"""
Takes a date or a datetime as input, outputs a datetime
"""
if isinstance(d, datetime):
return d
return datetime.datetime(d.year, d.month, d.day)
def datetime_cmp(d1, d2):
"""
Compares two timestamps. Tolerates dates.
"""
return cmp(ensure_datetime(d1), ensure_datetime(d2))
En mi caso, obtengo dos objetos y no sé si son objetos de fecha o fecha y hora. La conversión a la fecha no será buena, ya que estaría eliminando información: dos objetos cronometrados con la misma fecha deben ordenarse correctamente. Estoy de acuerdo con que las fechas se ordenen antes de la fecha y hora con la misma fecha.
Creo que usaré strftime antes de comparar:
>>> foo=datetime.date(2015,1,10)
>>> bar=datetime.datetime(2015,2,11,15,00)
>>> foo.strftime(''%F%H%M%S'') > bar.strftime(''%F%H%M%S'')
False
>>> foo.strftime(''%F%H%M%S'') < bar.strftime(''%F%H%M%S'')
True
No es elegante, pero debería funcionar. Creo que sería mejor que Python no generara el error, no veo ninguna razón por la que una fecha no sea comparable con una fecha. Este comportamiento es consistente en python2 y python3.
Estoy tratando de comparar las fechas que están en formato de cadena como ''20110930''
benchMark = datetime.datetime.strptime(''20110701'', "%Y%m%d")
actualDate = datetime.datetime.strptime(''20110930'', "%Y%m%d")
if actualDate.date() < benchMark.date():
print True
Use el método .date()
para convertir una fecha y hora en una fecha:
if item_date.date() > from_date:
Alternativamente, puede usar datetime.today()
lugar de date.today()
. Usted podría utilizar
from_date = from_date.replace(hour=0, minute=0, second=0, microsecond=0)
Para eliminar la parte del tiempo después.