cazador de pitones
Tengo una cadena de fecha y quiero convertirla al tipo de fecha:
he tratado de usar datetime.datetime.strptime
con el formato que quiero pero me esta 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
.
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 como se indicó anteriormente, o hacer lo siguiente al crear el objeto:
then = datetime.datetime.strptime(when, '%Y-%m-%d').date()
-
Busque aquí para mantener el formato de fecha y hora: enlace
– Carsten
30 de julio de 2019 a las 7:31
ukrutt
Si necesita que el resultado tenga en cuenta la zona horaria, puede usar el replace()
método de datetime
objetos. Esto conserva 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>)
Tenga en cuenta que esto devuelve un nuevo objeto de fecha y hora — now
permanece sin cambios.
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>
Para convertir una cadena en una fecha, la forma más fácil AFAIK es 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 de tiempo, entonces creo que es más fácil construir un nuevo objeto en lugar de “sustraer la parte de 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 comprender que una resta timedelta, y también tiene la opción de dar una zona horaria diferente en el mismo paso (lo cual tiene sentido, ya que tendrá una parte de tiempo cero de todos modos) .
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
)
Salida de ejemplo:
>>> 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)
cris
Si desea específicamente un datetime
y no un date
pero quiero que el tiempo se ponga a cero, podrías combinar date
con datetime.min.time()
Ejemplo:
datetime.datetime.combine(datetime.datetime.today().date(),
datetime.datetime.min.time())
David Buck
Puedes usar simplemente pd.to_datetime(then)
y pandas convertirán los elementos de fecha en formato de fecha ISO- [YYYY-MM-DD]
.
Puede pasar esto como mapa/aplicar para usarlo también en un marco de datos/serie.