tiempo utc de python menos 5 minutos

¿Cómo redondear un tiempo 5 minutos en Python?

Tengo este script, pero creo que esto puede ser más fácil, y en las horas completas, el cálculo sale mal. Cuando son las 22:03, devuelve 21:95 en lugar de 21:55.

import datetime from datetime import date import time utc_datetime = datetime.datetime.utcnow() jaar = date.today().year maand = time.strftime("%m") dag = time.strftime("%d") uurutc = utc_datetime.strftime("%H") autc = utc_datetime.strftime("%M") minuututc = int(5 * round(float(autc)/5)-5) uur = time.strftime("%H") a = time.strftime("%M") minuut = int(5 * round(float(a)/5)-5) timestamp = ''.join(str(x) for x in [jaar, maand, dag, uurutc, minuututc]) print timestamp 

Lo que realmente debería hacer el código:

Nuestra hora local es UTC + 2, pero solo necesito la hora UTC, por lo que la salida debe estar en UTC. Segundo, el tiempo debe ser de 5 minutos antes de la hora actual y luego redondear hacia abajo. El formato de salida de la cadena debe ser: YYYYMMDDHHMM.

Ejemplo:

hora local: 12:53> script de salida: 10:45

hora local: 17:07> secuencia de comandos de salida: 15:00

hora local: 08:24> script de salida: 06:15

¿Quién me puede ayudar con esto?

¡Gracias!

Utilice datetime.timedelta :

 from datetime import datetime, timedelta now = datetime.utcnow() rounded = now - timedelta(minutes=now.minute % 5 + 5, seconds=now.second, microseconds=now.microsecond) print rounded # -> 2014-04-12 00:05:00 

Podría usar d = d.replace(minute=n*(d.minute // n)) para redondear a n minutos:

 >>> d = datetime(2014, 4, 12, 0, 7); print(d.replace(minute=5*(d.minute // 5))) 2014-04-12 00:05:00 >>> n = 15 >>> d = datetime(2014, 4, 12, 10, 53); print(d.replace(minute=n*(d.minute//n))) 2014-04-12 10:45:00 >>> d = datetime(2014, 4, 12, 15, 7); print(d.replace(minute=n*(d.minute//n))) 2014-04-12 15:00:00 >>> d = datetime(2014, 4, 12, 6, 24); print(d.replace(minute=n*(d.minute//n))) 2014-04-12 06:15:00 

De acuerdo con el comentario anterior, use la clase timedelta:

 import datetime now = datetime.datetime.now() five_mins = datetime.timedelta(minutes=5) five_mins_ago = now - five_mins print five_mins_ago 

Edit: Otra respuesta es mejor ya que cubrió el redondeo