example - Python-Eliminar el tiempo de la cadena de fecha y hora
timestamp python (5)
Tengo una cadena de fecha y quiero convertirla al tipo de fecha:
He intentado usar datetime.datetime.strptime con el formato que quiero pero está devolviendo el tiempo con la conversión.
when = alldates[int(daypos[0])]
print when, type(when)
then = datetime.datetime.strptime(when, ''%Y-%m-%d'')
print then, type(then)
Esto es lo que devuelve la salida:
2013-05-07 <type ''str''>
2013-05-07 00:00:00 <type ''datetime.datetime''>
Necesito quitar el tiempo: 00:00:00.
Para convertir una cadena en una fecha, la forma más sencilla de que AFAIK sea el módulo dateutil:
import dateutil.parser
datetime_object = dateutil.parser.parse("2013-05-07")
También puede manejar zonas horarias:
print(dateutil.parser.parse("2013-05-07"))
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc())
Si tiene un objeto de fecha y hora, diga:
import pytz
import datetime
now = datetime.datetime.now(pytz.UTC)
y desea cortar la parte del tiempo, entonces creo que es más fácil construir un nuevo objeto en lugar de "restar la parte del tiempo". Es más corto y más a prueba de balas:
date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)
También mantiene la información de la zona horaria, es más fácil de leer y entender que una resta de timedelta, y también tiene la opción de dar una zona horaria diferente en el mismo paso (lo cual tiene sentido, ya que de todos modos tendrá una parte de tiempo cero) .
Para mí, necesitaba MANTENER un objeto de tiempo porque estaba usando UTC y es un poco molesto. Entonces, esto es lo que terminé haciendo:
date = datetime.datetime.utcnow()
start_of_day = date - datetime.timedelta(
hours=date.hour,
minutes=date.minute,
seconds=date.second,
microseconds=date.microsecond
)
end_of_day = start_of_day + datetime.timedelta(
hours=23,
minutes=59,
seconds=59
)
Ejemplo de salida:
>>> date
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600)
>>> start_of_day
datetime.datetime(2016, 10, 14, 0, 0)
>>> end_of_day
datetime.datetime(2016, 10, 14, 23, 59, 59)
datetime
objetos datetime
tienen un método replace()
. Esto preserva la zona horaria, por lo que puede hacer
>>> from django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>)
>>> now.replace(hour=0, minute=0, second=0, microsecond=0)
datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>)
>>> print then.date(), type(then.date())
2013-05-07 <type ''datetime.date''>
print then.date()
Lo que quieres es un objeto datetime.date. Lo que tienes es un objeto datetime.datetime. Puede cambiar el objeto cuando imprima según lo anterior, o hacer lo siguiente al crear el objeto:
then = datetime.datetime.strptime(when, ''%Y-%m-%d'').date()