[Python-de] [datetime] Konvertierung offset-aware datetime in offset-naive?

Detlef Lannert lannert at uni-duesseldorf.de
So Aug 26 22:47:36 UTC 2007


Andreas Jung <lists at zopyx.com> wrote:
> weiss jemand wie zwei solch unterschiedliche datetime Instanzen vergleichen
> oder in das eine oder andere Format überführen kann?

> (Pdb) self._D
> datetime.datetime(1997, 3, 9, 13, 45, tzinfo=<DstTzInfo 'US/Eastern' EST-1 
> day, 19:00:00 STD>)
> 
> (Pdb) datetime.now()
> datetime.datetime(2007, 8, 26, 10, 3, 51, 376135)
> 
> (Pdb) self._D < datetime.now()
> *** TypeError: can't compare offset-naive and offset-aware datetimes

Es funktioniert, wenn Du dem "Jetztzeitstempel" beibringst, zu welcher
Zeitzone er gehört. Wahrscheinlich gibt es (mindestens) eine elegantere
Möglichkeit, aber es geht z.B. mit dem Timezone-Database-Modul (ggf.
installieren mit "apt-get python-tz" oder Entsprechendem):

 >>> from pytz import timezone
 >>> jetzt = datetime.now()  # ? wie auch immer ...
 >>> tzjetzt = datetime.datetime(*(jetzt.timetuple()[:6]),
 ...     **{"tzinfo":timezone("CET")})
 >>> tzjetzt
 datetime.datetime(2007, 8, 26, 10, 3, 51, tzinfo=<DstTzInfo 'CET'
      CET+1:00:00 STD>)
 >>> self._D < tzjetzt
 True

... sollte dann gehen. Hmm, ziemlich umständlich ... Hoffe, es hilft
trotzdem.

  Detlef