ingresar horas formato fecha comparar python datetime

horas - Cómo truncar la hora en un objeto DateTime en Python?



formato fecha python (10)

Cuatro años después: otra forma, evitar replace

Sé que la respuesta aceptada de hace cuatro años funciona, pero esto parece un poco más ligero que usar replace :

dt = datetime.date.today() dt = datetime.datetime(dt.year, dt.month, dt.day)

Notas

  • Cuando creas un objeto datetime sin pasar propiedades de tiempo al constructor, obtienes la medianoche.
  • Como otros han notado, esto supone que usted quiere un objeto datetime para su uso posterior con timedeltas.
  • Puede, por supuesto, sustituir esto por la primera línea: dt = datetime.datetime.now()

¿Cuál es una forma elegante de truncar un objeto python datetime?

En este caso particular, hasta el día. Así que, básicamente, establecer horas, minutos, segundos y microsegundos en 0.

Me gustaría que la salida también sea un objeto datetime, no una cadena.



6 años después ... Encontré esta publicación y me gustó más el enfoque numpy:

import numpy as np dates_array = np.array([''2013-01-01'', ''2013-01-15'', ''2013-01-30'']).astype(''datetime64[ns]'') truncated_dates = dates_array.astype(''datetime64[D]'')

aclamaciones


Creo que esto es lo que estás buscando ...

>>> dt = datetime.datetime.now() >>> dt = dt.replace(hour=0, minute=0, second=0, microsecond=0) # Returns a copy >>> dt datetime.datetime(2011, 3, 29, 0, 0)

Pero si realmente no te importa el aspecto temporal de las cosas, entonces solo deberías estar pasando por objetos de date ...

>>> d_truncated = datetime.date(dt.year, dt.month, dt.day) >>> d_truncated datetime.date(2011, 3, 29)


Hay un módulo datetime_truncate que maneja esto por usted. Simplemente llama a datetime.replace.


Hay una gran biblioteca utilizada para manipular las fechas: Delorean

import datetime from delorean import Delorean now = datetime.datetime.now() d = Delorean(now, timezone=''US/Pacific) >>> now datetime.datetime(2015, 3, 26, 19, 46, 40, 525703) >>> d.truncate(''second'') Delorean(datetime=2015-03-26 19:46:40-07:00, timezone=US/Pacific) >>> d.truncate(''minute'') Delorean(datetime=2015-03-26 19:46:00-07:00, timezone=US/Pacific) >>> d.truncate(''hour'') Delorean(datetime=2015-03-26 19:00:00-07:00, timezone=US/Pacific) >>> d.truncate(''day'') Delorean(datetime=2015-03-26 00:00:00-07:00, timezone=US/Pacific) >>> d.truncate(''month'') Delorean(datetime=2015-03-01 00:00:00-07:00, timezone=US/Pacific) >>> d.truncate(''year'') Delorean(datetime=2015-01-01 00:00:00-07:00, timezone=US/Pacific)

y si quiere recuperar el valor de la fecha:

>>> d.truncate(''year'').datetime datetime.datetime(2015, 1, 1, 0, 0, tzinfo=<DstTzInfo ''US/Pacific'' PDT-1 day, 17:00:00 DST>)


No puede truncar un objeto datetime porque es inmutable .

Sin embargo, aquí hay una forma de construir una nueva fecha y hora con campos de 0 horas, minutos, segundos y microsegundos, sin descartar la fecha original o tzinfo:

newdatetime = now.replace(hour=0, minute=0, second=0, microsecond=0)


Para obtener una medianoche correspondiente a un objeto datetime determinado, puede usar el método datetime.combine() :

>>> from datetime import datetime, time >>> dt = datetime.utcnow() >>> dt.date() datetime.date(2015, 2, 3) >>> datetime.combine(dt, time.min) datetime.datetime(2015, 2, 3, 0, 0)

La ventaja en comparación con el método .replace() es que la solución basada en datetime.combine() continuará funcionando incluso si el módulo de datetime introduce el soporte de nanosegundos .

tzinfo se puede conservar si es necesario, pero el desplazamiento utc puede ser diferente a medianoche, por ejemplo, debido a una transición DST y, por lo tanto, una solución ingenua (configuración del tzinfo tiempo tzinfo ) puede fallar. Consulte ¿Cómo obtengo la hora UTC de "medianoche" para una zona horaria determinada?


Puede usar datetime.strftime para extraer el día, el mes, el año ...

Ejemplo:

from datetime import datetime d = datetime.today() # Retrieves the day and the year print d.strftime("%d-%Y")

Salida (para hoy):

29-2011

Si solo desea recuperar el día, puede usar un atributo de día como:

from datetime import datetime d = datetime.today() # Retrieves the day print d.day

Ouput (por hoy):

29


Use una date no una datetime y datetime si no le importa la hora.

>>> now = datetime.now() >>> now.date() datetime.date(2011, 3, 29)

Puede actualizar una fecha y hora como esta:

>>> now.replace(minute=0, hour=0, second=0, microsecond=0) datetime.datetime(2011, 3, 29, 0, 0)