Czy jest ktoś, kto może mi pomóc zrozumieć, co tu się dzieje?Dlaczego pytz localize() nie tworzy obiektu datetime z tzinfo pasującego do obiektu tz, który go zlokalizował?
import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"
Moje zrozumienie, że metoda localize()
na obiekcie czasowej pytz zajęłoby naiwny obiekt datetime i dodać obiekt tzinfo
pasujący obiekt czasowej wykonywania lokalizację. Wydaje się, że nie dzieje się to w tym przypadku.
Najwyraźniej jest coś, czego nie rozumiem o strefach czasowych, lub o sposobie, w jaki pytz obsługuje strefy czasowe. Czy ktoś może wyjaśnić?
Dziękuję za Twój komentarz. Dobry połów na CET/CEST. To była zła kopia i wklej z mojej strony (teraz edytowane). Eksperymentowałem zarówno z datą oszczędności w świetle dziennym, jak iz datą, która nie była dostępna dla światła dziennego. Próbowałem uruchomić to w Pythonie 3.4 z najnowszym pytzem i otrzymałem ten sam wynik. Zobacz: https://gist.github.com/bjmc/59d8650ae3d2aebb7584 Twoje informacje na temat źródła danych tz są mile widziane. Czy to oznacza, że atrybut 'tzinfo' z [nowoczesnej] zlokalizowanej daty nigdy nie byłby porównywalny z abstrakcyjnym obiektem strefy czasowej z pytz? – bjmc
Ogólnie rzecz biorąc, nie uważam, że 'tzinfo' jest porównywalne z innym' tzinfo' bez konkretnej daty i godziny. Jeśli jednak wiesz, że oba obiekty pochodzą z pytz (lub z [tzlocal] (https://pypi.python.org/pypi/tzlocal)), możesz porównać ich właściwości '.zone', które zawierają tylko ciąg znaków identyfikator strefy ('" Europa/Berlin "'). –
Nie jestem pewien, czy to jest odpowiedź. Powtarza się, że to problem. Problem występuje, gdy próbujesz zastąpić tzinfo obiektu datetime. –