Python datetime: configuración de hora y minuto fijos después de usar strptime para obtener día, mes, año

2 minutos de lectura

avatar de usuario
usuario1678031

He convertido con éxito algo de 26 Sep 2012 formatear a 26-09-2012 usando:

datetime.strptime(request.POST['sample_date'],'%d %b %Y')

Sin embargo, no sé cómo configurar la hora y los minutos de algo como lo anterior a las 11:59. ¿Alguien sabe como hacer esto?

Tenga en cuenta que puede ser una fecha futura o cualquiera aleatoria, no solo la fecha actual.

avatar de usuario
neoneo

Usar datetime.replace:

from datetime import datetime
dt = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdatetime = dt.replace(hour=11, minute=59)

También vale la pena señalar: datetime.replace devuelve una nueva copia del datetime (ya que datetime es inmutable): es como str.replace en ese sentido.

  • si, solo hazlo date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59). Usé la variable adicional para que la línea no fuera demasiado larga 🙂

    – nneonne

    18 de septiembre de 2012 a las 0:42

  • También vale la pena señalar: datetime.replace devuelve un nuevo Copiar de la fecha y hora (ya que datetime es inmutable): es como str.replace en ese sentido.

    – nneonne

    18 de septiembre de 2012 a las 0:43

  • ¿Cómo puedo eliminar todo después de ‘2016-06-01’ para que la hora, el minuto y el segundo desaparezcan?

    – PV8

    1 de marzo de 2019 a las 14:05

  • @PV8 Si desea una fecha y hora, ejecute: r = dt.replace(hour=0, minute=0, second=0, microsecond=0). Si desea un objeto de fecha, ejecute: r = dt.date()

    – Flamm

    9 de diciembre de 2020 a las 9:24


avatar de usuario
Abhay Chauhan

fechahora.reemplazar() brindará las mejores opciones. Además, proporciona la posibilidad de reemplazar el día, el año y el mes.

Supongamos que tenemos un datetime objeto y fecha se representa como:
"2017-05-04"

>>> from datetime import datetime
>>> date = datetime.strptime('2017-05-04',"%Y-%m-%d")
>>> print(date)
2017-05-04 00:00:00
>>> date = date.replace(minute=59, hour=23, second=59, year=2018, month=6, day=1)
>>> print(date)
2018-06-01 23:59:59

  • ¿Cuál es el valor agregado de su respuesta contra la respuesta de nneonneo publicada 5 años antes que la suya?

    – Samuel Dauzon

    23 de agosto de 2019 a las 23:51

avatar de usuario
Florian Brucker

Si tienes una cita como datetime.datetime (o un datetime.date) instancia y desea combinarlo a través de un tiempo de un datetime.time instancia, entonces puedes usar el método de clase datetime.datetime.combine:

import datetime
dt = datetime.datetime(2020, 7, 1)
t = datetime.time(12, 34)
combined = datetime.datetime.combine(dt.date(), t)

avatar de usuario
pymen

Accesos directos para convertir datetime a max o min

import datetime

def dt_time_min(dt):
    """converts any datetime/date to new datetime with same date and time=0:00:00"""
    return datetime.datetime.combine(dt, datetime.time.min)


def dt_time_max(dt):
    """converts any datetime/date to new datetime with same date and time=23:59:59.999999"""
    return datetime.datetime.combine(dt, datetime.time.max)

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad