Daniel O'Connor <[email protected]> added the comment:
On 17/08/2011, at 10:30, Alexander Belopolsky wrote:
> Alexander Belopolsky <[email protected]> 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 <[email protected]>
<http://bugs.python.org/issue12750>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com