2011-12-17 13 views
22

Please help me per modificare l'oggetto datetime (ad esempio: 2011-12-17 11:31:00-05:00) (incluso il fuso orario) su timestamp Unix (come la funzione time.time() in Python).Modifica datetime in data e ora Unix in Python

+0

Forse un duplicato di http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp –

+0

correlati: [Conversione datetime.date a UTC timestamp in Python] (http: // stackoverflow.com/a/8778548/4279) – jfs

risposta

6

risposta incompleta (non si occupa di fusi orari), ma si spera utile:

time.mktime(datetime_object.timetuple()) 

** A cura sulla base della seguente commento **

Nel mio programma, l'utente immettere datetime, seleziona il fuso orario. ... Ho creato una lista del fuso orario (usa pytz.all_timezones) e permetto all'utente di scegliere un fuso orario da quella lista.

Il modulo Pytz fornisce le conversioni necessarie. Per esempio. se è il vostro dtdatetime oggetto e utente selezionato 'US/Eastern'

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

L'argomento is_dst=True è di risolvere volte ambigui durante gli intervalli di 1 ora alla fine di ora legale (vedi qui http://pytz.sourceforge.net/#problems-with-localtime).

+0

Ho davvero bisogno di gestire i fusi orari. –

+0

L'oggetto datetime di input contiene un tzinfo corretto? Oppure, se no, come fai a sapere in quale fuso orario sei interessato? –

+1

si. Nel mio programma, l'utente inserisce datetime, seleziona il fuso orario. Io uso il linguaggio Python, ho creato un elenco di fuso orario (usa pytz.all_timezones) e permetto all'utente di scegliere un fuso orario da quella lista. Il mio problema è come convertire il datetime insieme a timezone id per unix timestamp. Tutte le risposte di cui sopra donot risolvono il mio problema. Mi aiuti per favore. –

14

Un altro modo è:

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

Timestamp è il timestamp unix che mostra la stessa data con oggetto datetime d.

+4

nota: rimuove le frazioni di un secondo. Per conservare i microsecondi, utilizzare: ['(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

L'ora locale potrebbe essere ambigua, ad es. Durante transizioni end-of-DST ("fall back"). 'timetuple()' imposta 'tm_isdst' su' -1' che forza 'mktime()' per indovinare, ci sono il 50% di possibilità che si sbaglia. O utilizzare utc time o oggetti datetime consapevoli. – jfs