Daniel O'Connor <dar...@dons.net.au> added the comment: On 17/08/2011, at 10:30, Alexander Belopolsky wrote: > Alexander Belopolsky <alexander.belopol...@gmail.com> added the comment: > >> i.e. it appears that replace() applies the TZ offset to a naive datetime >> object effectively assuming it is local time rather than un-timezoned >> (which is what the docs imply to me) > > I don't understand your issue. The replace method does not assume anything, > it just replaces whatever fields you specify with new values. You can > replace tzinfo just like any other field, year, month, day, etc while > preserving the other fields. I think this is fairly well documented. I think > what you are looking for is the astimezone() method which, however may not > work well on naive datetime instances simply because a naive instance may be > ambiguous in presence of DST. However, if you start with an aware UTC > datetime, you should be able to use astimezone() to convert to any local TZ.
Hmm I see, it would appear the problem lies with strftime(). [ur 10:34] ~ >ipython-2.7 Python 2.7.2 (default, Aug 6 2011, 23:46:16) Type "copyright", "credits" or "license" for more information. IPython 0.10.2 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. In [48]: now = datetime.datetime.utcnow() In [49]: nowtz = now.replace(tzinfo = pytz.utc) In [50]: nowadl = now.replace(tzinfo = pytz.timezone('Australia/Adelaide')) In [51]: now Out[51]: datetime.datetime(2011, 8, 17, 1, 53, 51, 451118) In [52]: nowtz Out[52]: datetime.datetime(2011, 8, 17, 1, 53, 51, 451118, tzinfo=<UTC>) In [53]: nowadl Out[53]: datetime.datetime(2011, 8, 17, 1, 53, 51, 451118, tzinfo=<DstTzInfo 'Australia/Adelaide' CST+9:30:00 STD>) In [54]: now.strftime("%F %r %s") Out[54]: '2011-08-17 01:53:51 AM 1313511831' In [55]: nowtz.strftime("%F %r %s") Out[55]: '2011-08-17 01:53:51 AM 1313511831' In [56]: nowadl.strftime("%F %r %s") Out[56]: '2011-08-17 01:53:51 AM 1313511831' Wed 17 Aug 2011 01:54:52 UTC [ur 11:24] ~ >date +%s 1313546093 [ur 11:24] ~ >date -ujr `date +%s` Wed 17 Aug 2011 01:54:59 UTC [ur 11:24] ~ >date -ujr 1313511831 Tue 16 Aug 2011 16:23:51 UTC i.e. strftime disregards tzinfo and seems to treat the time as LT (I think). It certainly doesn't behave the way I'd expect after using strftime(3) et al :) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue12750> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com