¿Por qué pytz localize () no produce un objeto datetime con tzinfo que coincida con el objeto tz que lo localizó?

¿Hay alguien que pueda ayudarme a entender lo que está pasando aquí?

import pytz from datetime import datetime tz = pytz.timezone('Europe/Berlin') print repr(tz) #  dt = datetime(2011, 1, 3, 18, 40) result = tz.localize(dt) print repr(result.tzinfo) #  assert result.tzinfo == tz, "Why aren't these the same timezone?" 

Mi entendimiento fue que el método localize() en un objeto de zona horaria de pytz tomaría un objeto de fecha y hora ingenuo, y agregaría una propiedad tzinfo que coincida con el objeto de zona horaria que realiza la localización. Eso no parece estar sucediendo en este caso.

Claramente, hay algo que no entiendo sobre las zonas horarias, o sobre la forma en que Pytz maneja las zonas horarias. ¿Alguien puede explicar?

Son la misma zona horaria – "Europe/Berlin" .

Cuando los está imprimiendo, la salida incluye la abreviatura y el desplazamiento que se aplican en ese momento en particular.

Si examinas las fonts de datos tz , verás:

 # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Berlin 0:53:28 - LMT 1893 Apr 1:00 C-Eur CE%sT 1945 May 24 2:00 1:00 SovietZone CE%sT 1946 1:00 Germany CE%sT 1980 1:00 EU CE%sT 

Por lo tanto, parece que cuando la zona horaria no ha localizado una fecha y hora, entonces solo usa la primera entrada.

También parece que pytz no retiene los 28 segundos adicionales de la desviación del tiempo promedio local, pero eso no importa a menos que esté trabajando con fechas en Berlín antes de abril de 1893.