Piszę skrypt Pythona, który zawiera dwa wiersze kodu konwersji datę został przekazany do metody do czasu UTC:Przesunięcie strefy czasowej w pythonie jest nieprawidłowe?
print "Timezone: %s" % get_localzone()
date = datetime.now(tz=get_localzone())
print "Local time: %s" % date
utc = pytz.utc
utc_date = date.astimezone(utc)
print "UTC date: %s" % utc_date
a wynik jest:
Timezone: America/Chicago
Local time: 2015-06-17 14:58:45.224827-05:00
UTC date: 2015-06-17 19:58:45.224827+00:00
jak można Patrz przesunięcie czasu lokalnego jest „-05: 00”, nic złego się z nim, ale kiedy utworzyć własny obiekt datetime o tej samej strefie czasowej:
date = datetime(2015, 6, 17, 14, 58, 45, tzinfo=get_localzone())
wynik stać s:
Timezone: America/Chicago
Local time: 2015-06-17 14:58:45-05:51
Przesunięcie zmieniono z "-05: 00" na "-05: 51". Użyłem nawet tego samego czasu, który wygenerował pierwszy "datetime.now()", a strefa czasowa się nie zmieniła, czy ktoś mógłby mi wyjaśnić, dlaczego tak się dzieje? Dzięki!
Dzięki za szczegółową odpowiedź, to rozwiązało mój problem :) –
@YueQiLi: uwaga: powinieneś użyć 'datetime.now (tz)' zamiast 'tz.localize (datetime.now())'. Ten ostatni może zawieść, jeśli czas lokalny jest niejednoznaczny (np. Podczas przejścia DST). Jeśli czas wejściowy nie jest teraz, możesz przekazać parametr 'is_dst' do' tz.localize() ', aby ujednoznacznić. – jfs
@ J.F.Sebastian Dzięki, po prostu rzuciłem okiem na [dokumentację pytz] (http://pythonhosted.org/pytz/) i masz rację, dodam to do mojego kodu. O innym podobnym pytaniu, pomimo faktu, że oba nasze problemy są spowodowane niewłaściwym użyciem konstruktora datetime, dla początkujących takich jak ja trudno jest zaklasyfikować je do tego samego rodzaju problemu. Utrzymanie mojego będzie pomocne dla innych ludzi, aby uniknąć tego rodzaju błędu żółtodzioba :) –