Datetime timezone trouble (was: Matplotlib X-axis timezone trouble)

Chris Angelico rosuav at gmail.com
Wed Jul 1 19:08:34 CEST 2015


On Thu, Jul 2, 2015 at 2:36 AM, Peter Pearson <pkpearson at nowhere.invalid> wrote:
> On Wed, 1 Jul 2015 17:15:38 +1000, Chris Angelico <rosuav at gmail.com> wrote:
>>
>> Interestingly, when I tried this (pytz version 2015.4, Python 2.7.9,
>> Debian Jessie), I saw utcoffset() showing (-1, 58020) for both. That
>> seems... odd. And I can't fault your dates - those definitely ought to
>> be easily inside and easily outside the DST boundaries. When I try
>> those dates in an unrelated time converter, they do show seven- and
>> eight- hour offsets to UTC. Maybe we're both misunderstanding the
>> meaning of utcoffset()?
>
> Here's a very simple demonstration that either something is wrong
> or I don't understand how datetime and tzinfo are supposed to work:
>
> $ python
> Python 2.7.3 (default, Mar 13 2014, 11:03:55)
>>>> from pytz import timezone
>>>> from datetime import datetime
>>>> pacific = timezone("US/Pacific")
>>>> print(datetime(2014, 7, 7, 12, tzinfo=pacific))
> 2014-07-07 12:00:00-08:00
>>>> print(datetime(2014, 1, 7, 12, tzinfo=pacific))
> 2014-01-07 12:00:00-08:00
>>>>
>
> The "-08:00" is appropriate in the second (January) case, but the
> first case is in July, and should have "-07:00".

Interesting. I poked around with the docstring for pytz.timezone and
replicated it more exactly, and this appears to work:

$ python
Python 2.7.9 (default, Mar  1 2015, 12:57:24)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pytz import timezone
>>> from datetime import datetime
>>> pacific = timezone("US/Pacific")
>>> utc = timezone("UTC")
>>> print(datetime(2014, 7, 7, 12, tzinfo=utc).astimezone(pacific))
2014-07-07 05:00:00-07:00
>>> print(datetime(2014, 1, 7, 12, tzinfo=utc).astimezone(pacific))
2014-01-07 04:00:00-08:00

Clearly I do not understand what's going on here.

ChrisA


More information about the Python-list mailing list