When working with timezones datetime objects are represented in the tzinfo object you supply, eg. when you define these classes (and run them on a system set to Paris time):
from datetime import tzinfo, timedelta, datetime import time class UTC(tzinfo): """UTC timezone""" def utcoffset(self, dt): return timedelta(0) def tzname(self, dt): return "UTC" def dst(self, dt): return timedelta(0) class CET(tzinfo): """CET timezone""" def utcoffset(self, dt): return timedelta(seconds = -time.timezone) def dst(self, dt): return timedelta(0) def tzname(self, dt): return "CET" class CEST(tzinfo): """CET timezone with DST""" def utcoffset(self, dt): return timedelta(seconds = -time.altzone) def dst(self, dt): return timedelta(seconds = -time.altzone) - \ timedelta(seconds = -time.timezone) def tzname(self, dt): return "CEST" And you create these objects: utc = UTC() cet = CET() cest = CEST() d = datetime(2005,06,01,16,59,tzinfo=utc) This statement print 'UTC %s' % d Will print: UTC 2005-06-01 16:59:00+00:00 And this one: print 'As CET %s' % d.astimezone(cet) Will print: As CET 2005-06-01 17:59:00+01:00 And this one: print 'As CET with DST %s' % d.astimezone(cest) Will print: As CET with DST 2005-06-01 18:59:00+02:00 Additional: This: d = datetime(2005,06,01,16,59,tzinfo=cet) print cet, d Will print: <__main__.CET object at 0xb7d3aaac> 2005-06-01 16:59:00+01:00 And this: d = datetime(2005,06,01,16,59,tzinfo=cest) print cest, d Will print: <__main__.CEST object at 0xb7d3aaec> 2005-06-01 16:59:00+02:00 So at least with these tzinfo objects everything is as expected, I'm not sure where your actual problem is, is it in the pytz module (with which I do not have experience)? -- http://mail.python.org/mailman/listinfo/python-list