example change python datetime unix-timestamp

change - set datetime python



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

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í?


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)


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

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 .


Esto es lo que necesitas:

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


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.


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).


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"))


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.


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


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


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