Próbuję napisać parę funkcji, dt
i ut
, które konwertują w przód i w tył między normalnym czasem unixa (sekundy od 1970-01-01 00:00:00 UTC) i obiekt datetime Pythona.Konwertuj czas uniksowy na obiekt typu datetime iz powrotem (pary funkcji konwersji czasu, które są odwrotne)
Jeśli dt
i ut
były odpowiednie odwrotne czym ten kod to drukowania tego samego znacznika czasu dwukrotnie:
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))
Niestety, drugi znacznik czasu wynosi 3600 sekund (godzinę) mniej niż pierwszy. Wydaje mi się, że dzieje się tak tylko w bardzo szczególnych sytuacjach, może w tej godzinie czas letni przestaje działać. Ale czy istnieje sposób na napisanie dt
i ut
, więc są one prawdziwymi odwrotnościami siebie nawzajem?
Powiązane pytanie: Making matplotlib's date2num and num2date perfect inverses
BTW, jeśli funkcja nic nie robi, ale wywołuje inną funkcję z te same argumenty, które można następnie przypisać: 'dt = datetime.datetime.utcfromtimestamp'. Funkcje są pierwszorzędnymi obywatelami w Pythonie: możesz przekazać je jako parametry do innych funkcji, powrócić z funkcji itp. – jfs
Ach, ładny, świetny punkt! Czy jest to bardziej efektywne, czy tylko kwestia zwięzłości? A co z 'def f (x): return foo (x)' vs 'f = lambda x: foo (x)'? (Moim wspomnieniem jest to, że są one równoważne, zarówno pod względem funkcjonalnym, jak i pod względem wydajności). – dreeves
'f = g' oznacza, że f, g to dwie nazwy odnoszące się do tej samej funkcji. 'def' i' lambda' tworzą nową funkcję. – jfs