Python Cree la marca de tiempo de Unix cinco minutos en el futuro

Tengo que crear un valor de “Caducidad” 5 minutos en el futuro, pero debo proporcionarlo en formato de marca de hora UNIX. Tengo esto hasta ahora, pero parece un hack.

def expires(): '''return a UNIX style timestamp representing 5 minutes from now''' epoch = datetime.datetime(1970, 1, 1) seconds_in_a_day = 60 * 60 * 24 five_minutes = datetime.timedelta(seconds=5*60) five_minutes_from_now = datetime.datetime.now() + five_minutes since_epoch = five_minutes_from_now - epoch return since_epoch.days * seconds_in_a_day + since_epoch.seconds 

¿Hay algún módulo o función que haga la conversión de la marca de tiempo por mí?

Otra forma es usar calendar.timegm :

 future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) return calendar.timegm(future.timetuple()) 

También es más portátil que %s flag to strftime (que no funciona en Windows).

Ahora en Python> = 3.3 , puedes llamar al método timestamp () para obtener la marca de tiempo como un flotador.

 import datetime current_time = datetime.datetime.now(datetime.timezone.utc) unix_timestamp = current_time.timestamp() # works if Python >= 3.3 unix_timestamp_plus_5_min = unix_timestamp + (5 * 60) # 5 min * 60 seconds 

Acabo de encontrar esto, y es aún más corto.

 import time def expires(): '''return a UNIX style timestamp representing 5 minutes from now''' return int(time.time()+300) 

Esto es lo que necesitas:

 import time import datetime n = datetime.datetime.now() unix_time = time.mktime(n.timetuple()) 

Puede usar datetime.strftime para obtener la hora en forma de Época, usando la cadena de formato %s :

 def expires(): future = datetime.datetime.now() + datetime.timedelta(seconds=5*60) return int(future.strftime("%s")) 

Aquí hay una solución basada en datetime menos dañada para convertir de objeto fecha y hora a posix marca de tiempo:

 future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) return (future - datetime.datetime(1970, 1, 1)).total_seconds() 

Ver más detalles en Convertir datetime.date a la marca de hora UTC en Python .

 def in_unix(input): start = datetime.datetime(year=1970,month=1,day=1) diff = input - start return diff.total_seconds() 

La clave es asegurarse de que todas las fechas que esté utilizando estén en la zona horaria de utc antes de comenzar a convertir. Vea http://pytz.sourceforge.net/ para aprender cómo hacerlo correctamente. Al normalizar a utc, elimina la ambigüedad de las transiciones de ahorro de luz diurna. Luego puede usar con seguridad timedelta para calcular la distancia desde la época de Unix, y luego convertir a segundos o milisegundos.

Tenga en cuenta que la marca de tiempo unix resultante se encuentra en la zona horaria UTC. Si desea ver la marca de tiempo en una zona horaria localizada, deberá realizar otra conversión.

También tenga en cuenta que esto solo funcionará para las fechas posteriores a 1970.

  import datetime import pytz UNIX_EPOCH = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc) def EPOCH(utc_datetime): delta = utc_datetime - UNIX_EPOCH seconds = delta.total_seconds() ms = seconds * 1000 return ms 

Lo siguiente se basa en las respuestas anteriores (más una corrección para los milisegundos) y emula datetime.timestamp() para Python 3 antes de 3.3 cuando se usan las zonas horarias.

 def datetime_timestamp(datetime): ''' Equivalent to datetime.timestamp() for pre-3.3 ''' try: return datetime.timestamp() except AttributeError: utc_datetime = datetime.astimezone(utc) return timegm(utc_datetime.timetuple()) + utc_datetime.microsecond / 1e6 

Para responder estrictamente a la pregunta como se le preguntó, querría:

 datetime_timestamp(my_datetime) + 5 * 60 

datetime_timestamp es parte de simple-date . Pero si estuvieras usando ese paquete probablemente escribirías:

 SimpleDate(my_datetime).timestamp + 5 * 60 

que maneja muchos más formatos / tipos para my_datetime.

 def expiration_time(): import datetime,calendar timestamp = calendar.timegm(datetime.datetime.now().timetuple()) returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp return returnValue 

Tenga en cuenta que las soluciones con timedelta.total_seconds() funcionan en python-2.7 +. Use calendar.timegm(future.utctimetuple()) para versiones inferiores de Python.