2011-12-17 21 views
22

Ayúdeme a cambiar el objeto datetime (por ejemplo: 2011-12-17 11:31:00-05:00) (incluida la zona horaria) a la marca de tiempo Unix (como function time.time() en Python).Cambiar datetime a sello de tiempo Unix en Python

+0

Posiblemente un duplicado de http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp –

+0

relacionada: [en la conversión de datetime.date a marca de tiempo UTC en Python] (http: // stackoverflow.com/a/8778548/4279) – jfs

Respuesta

6

respuesta incompleta (no se refiere a las zonas horarias), pero espero sea de utilidad:

time.mktime(datetime_object.timetuple()) 

** editado basan en el siguiente comentario **

En mi programa, el usuario escriba fecha y hora, selecciona la zona horaria. ... Creé una lista de zona horaria (use pytz.all_timezones) y le permití al usuario elegir una zona horaria de esa lista.

El módulo de Pytz proporciona las conversiones necesarias. P.ej. Si dt es su datetime objeto, y el usuario selecciona 'de Estados Unidos/Oriente'

import pytz, calendar 
tz = pytz.timezone('US/Eastern') 
utc_dt = tz.localize(dt, is_dst=True).astimezone(pytz.utc) 
print calendar.timegm(utc_dt.timetuple()) 

El argumento is_dst=True es resolver veces ambiguas durante los intervalos de 1 hora al final del horario de verano (ver aquí http://pytz.sourceforge.net/#problems-with-localtime).

+0

Realmente necesito lidiar con zonas horarias. –

+0

¿El objeto datetime de entrada contiene un tzinfo apropiado? O, si no, ¿cómo sabes en qué zona horaria estás interesado? –

+1

sí. En mi programa, el usuario ingresa la hora de la fecha, selecciona la zona horaria. Utilizo el lenguaje de Python, creé una lista de zona horaria (use pytz.all_timezones) y le permití al usuario elegir una zona horaria de esa lista. Mi problema es cómo convertir la fecha y hora junto con la identificación de la zona horaria en la marca de tiempo de Unix. Todas las respuestas anteriores no resuelven mi problema. Por favor, ayúdame. –

14

Otra forma es:

import calendar 
from datetime import datetime 
d = datetime.utcnow() 
timestamp=calendar.timegm(d.utctimetuple()) 

Timestamp es la marca de tiempo Unix que muestra la misma fecha con objeto de fecha y hora d.

+4

nota: elimina fracciones de segundo. Para conservar microsegundos, use: ['(d - datetime (1970,1,1)) .total_seconds()'] (http://stackoverflow.com/a/8778548/4279) – jfs

12
import time 

import datetime 

dtime = datetime.datetime.now() 

ans_time = time.mktime(dtime.timetuple()) 
+2

La hora local puede ser ambigua, por ejemplo, durante transiciones de fin de horario de verano ("repliegue"). 'timetuple()' establece 'tm_isdst' en' -1' que fuerza a 'mktime()' a adivinar, es decir, hay un 50% de probabilidad de que se equivoque. Utilice los objetos utc time o aware datetime. – jfs

Cuestiones relacionadas