I have a datetime object produced using
strptime ().
>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)
Lo que tengo que hacer es redondear el minuto al décimo minuto más cercano. Lo que he estado haciendo hasta este punto fue tomar el valor de los minutos y usar round () en él.
min = round(tm.minute, -1)
Sin embargo, como en el ejemplo anterior, da un tiempo no válido cuando el valor de los minutos es mayor que 56. es decir: 3:60
¿Cuál es una mejor manera de hacer esto? ¿ datetime
Apoya esto?
dt.replace(hour=0, minute=0, second=0)
lugar dedt.min
.roundTime(datetime.datetime(2012,12,31,23,44,59,1234),roundTo=60*60*24*7)
vsroundTime(datetime.datetime(2012,12,30,23,44,59,1234),roundTo=60*60*24*7)
datetime.timedelta(100,1,2,3).seconds == 1
Desde la mejor respuesta que modifiqué a una versión adaptada usando solo objetos de fecha y hora, esto evita tener que hacer la conversión a segundos y hace que el código de llamada sea más legible:
Muestras con redondeo de 1 hora y redondeo de 15 minutos:
fuente
print roundTime(datetime.datetime(2012,12,20,23,44,49),datetime.timedelta(days=15))
2012-12-20 00:00:00
whileprint roundTime(datetime.datetime(2012,12,21,23,44,49),datetime.timedelta(days=15))
2012-12-21 00:00:00
Usé el código de Stijn Nevens (gracias Stijn) y tengo un pequeño complemento para compartir. Redondeo hacia arriba, hacia abajo y redondeando al más cercano.
actualización 2019-03-09 = comentario Spinxz incorporado; gracias.
actualización 2019-12-27 = comentario Bart incorporado; gracias.
Probado para date_delta de "X horas" o "X minutos" o "X segundos".
fuente
up
todos modos, el redondeo es inexacto con esta función;2019-11-07 14:39:00.776980
condate_delta
igual, por ejemplo, 30 segundos yto='up'
da como resultado2019-11-07 14:39:00
.up
redondeo puede no ser un caso de uso común, es necesario cuando se trata de aplicaciones que comienzan en el límite de un minutoPandas tiene una función de ronda de fecha y hora, pero como con la mayoría de las cosas en Pandas, debe estar en formato de serie.
Docs : cambie la cadena de frecuencia según sea necesario.
fuente
Timestamp
contienefloor
yceil
tambiénsi no desea usar la condición, puede usar el
modulo
operador:ACTUALIZAR
¿querías algo como esto?
.. si quieres resultado como cadena. para obtener el resultado de fecha y hora, es mejor usar timedelta - ver otras respuestas;)
fuente
estoy usando esto. tiene la ventaja de trabajar con fechas y horas conscientes de tz.
tiene la desventaja de que solo trabaja por tiempos de menos de una hora.
fuente
Aquí hay una solución generalizada más simple sin problemas de precisión de punto flotante y dependencias de bibliotecas externas:
En tu caso:
fuente
fuente
Basado en Stijn Nevens y modificado para el uso de Django para redondear la hora actual a los 15 minutos más cercanos.
si necesita la fecha y la hora completas, simplemente elimine el
.strftime('%H:%M:%S')
fuente
No es lo mejor para la velocidad cuando se detecta la excepción, sin embargo, esto funcionaría.
Tiempos
fuente
Una solución intuitiva de dos líneas para redondear a una unidad de tiempo dada, aquí segundos, para un
datetime
objetot
:Si desea redondear a una unidad diferente, simplemente modifique
format_str
.Este enfoque no se redondea a cantidades de tiempo arbitrarias como los métodos anteriores, sino que es una forma muy pitónica de redondear a una hora, minuto o segundo determinados.
fuente
Otra solucion:
¡Espero que esto ayude!
fuente
El camino más corto que conozco
fuente
Aquellos parecen demasiado complejos
fuente
Un enfoque sencillo:
fuente
sí, si sus datos pertenecen a una columna DateTime en una serie de pandas, puede redondearlos usando la función integrada pandas.Series.dt.round. Consulte la documentación aquí sobre pandas.Series.dt.round . En su caso de redondeo a 10min, será Series.dt.round ('10min') o Series.dt.round ('600s') así:
Edite para agregar código de ejemplo:
fuente