Sto provando a scrivere un paio di funzioni, dt
e ut
, che convertono avanti e indietro tra un tempo normale di unix (secondi da 1970-01-01 00:00:00 UTC) e un oggetto datetime Python.Convertire un unixtime in un oggetto datetime e viceversa (coppia di funzioni di conversione del tempo inverse)
Se dt
e ut
erano inverse corretto allora questo codice sarebbe stampare la stessa data e ora due volte:
import time, datetime
# Convert a unix time u to a datetime object d, and vice versa
def dt(u): return datetime.datetime.fromtimestamp(u)
def ut(d): return time.mktime(d.timetuple())
u = 1004260000
print u, "-->", ut(dt(u))
Ahimè, la seconda timestamp è 3600 secondi (un'ora) in meno rispetto al primo. Penso che questo accada solo per un tempo molto particolare, forse durante quell'ora che l'ora legale salta sopra. Ma c'è un modo per scrivere dt
e ut
in modo che siano veri inversi l'uno dell'altro?
questione connessa: Making matplotlib's date2num and num2date perfect inverses
btw, se la funzione non fa altro che chiama un'altra funzione con gli stessi argomenti allora potresti semplicemente assegnarlo: 'dt = datetime.datetime.utcfromtimestamp'. Le funzioni sono cittadini di prima classe in Python: puoi passarle come parametri a un'altra funzione, tornare dalle funzioni, ecc. – jfs
Ah, bello, ottimo punto! È più efficiente farlo o solo una questione di succinto? Che ne dite di 'def f (x): return foo (x)' vs 'f = lambda x: foo (x)'? (Il mio ricordo è che quelli sono equivalenti, sia dal punto di vista funzionale che di efficienza.) – dreeves
'f = g' significa che f, g sono due nomi che si riferiscono alla stessa funzione. 'def' e' lambda' creano una nuova funzione. – jfs