Search code examples
datetimepytz

Datetime and Pytz Timezone .weekday() issue


I'm running into an issue when I'm trying to create a histogram of specific createdAt datetimes for orders. The issue is that even after created timezone aware datetimes, the .weekday() shows up as the same day, even though it should be a different time

The code I'm using to test this occurrence is as follows:

import datetime
import pytz

value = {
    'createdAt': '2017-04-24T00:48:03+00:00'
}
created_at = datetime.datetime.strptime(value['createdAt'], '%Y-%m-%dT%H:%M:%S+00:00')

timezone = pytz.timezone('America/Los_Angeles')

created_at_naive = created_at
created_at_aware = timezone.localize(created_at_naive)

print(created_at_naive) # 2017-04-24 00:48:03
print(created_at_aware) # 2017-04-24 00:48:03-07:00
print(created_at_naive.weekday()) # 0 (Monday)
print(created_at_aware.weekday()) # 0 (should be Sunday)

Solution

  • The problem is that you need to actually change the datetime to the new timezone:

    >>> timezone('UTC').localize(created_at)
    datetime.datetime(2017, 4, 24, 0, 48, 3, tzinfo=<UTC>)
    
    >>>timezone('UTC').localize(created_at).astimezone(timezone('America/Los_Angeles'))
    datetime.datetime(2017, 4, 23, 17, 48, 3, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>)