Python and timezones

S

shandy.b

I'm trying to write some code to deal with world timezones, and I'm
getting a strange result. America/Iqaluit should not be showing up in
UTC+00:00, but it is. Can anyone see what's wrong with this code?


import time
from datetime import datetime
import os
import pytz

def getZoneNamesOnThisComputer():
for i in pytz.all_timezones:
if os.path.exists( os.path.join('/tmp/usr/share/zoneinfo/',
i)):
yield i


def getZonesGroupedByOffset():
'''return a dict of all the zone names , grouped by their offset
eg:
{'-0400': ['America/Blanc-Sablon', 'Etc/GMT+4'],
'+0000': ['America/Iqaluit', 'Etc/GMT', 'Europe/Belfast', 'GB',
'GMT'],
...
}
'''
Y,M,D,h,m,s = time.localtime()[:6]

zonesGroupedByOffset = {}

for name in getZoneNamesOnThisComputer():
tz = pytz.timezone(name)
now = datetime(Y,M,D,h,m,s, tzinfo=tz)
# strfime returns a string like "-0800" or "+0430" or "0000"
offsetKey = now.strftime('%z')
if not zonesGroupedByOffset.has_key(offsetKey):
zonesGroupedByOffset[offsetKey] = []
zonesGroupedByOffset[offsetKey].append(name)
return zonesGroupedByOffset


z = getZonesGroupedByOffset()
print z['+0000']

# Why is America/Iqaluit showing up here???
 
M

Mensanator

I'm trying to write some code to deal with world timezones, and I'm
getting a strange result.  America/Iqaluit should not be showing up in
UTC+00:00, but it is.  Can anyone see what's wrong with this code?

import time
from datetime import datetime
import os
import pytz

def getZoneNamesOnThisComputer():
    for i in pytz.all_timezones:
        if os.path.exists( os.path.join('/tmp/usr/share/zoneinfo/',
i)):
            yield i

def getZonesGroupedByOffset():
    '''return a dict of all the zone names , grouped by their offset
    eg:
    {'-0400': ['America/Blanc-Sablon', 'Etc/GMT+4'],
     '+0000': ['America/Iqaluit', 'Etc/GMT', 'Europe/Belfast', 'GB',
'GMT'],
     ...
    }
    '''
    Y,M,D,h,m,s = time.localtime()[:6]

    zonesGroupedByOffset = {}

    for name in getZoneNamesOnThisComputer():
        tz = pytz.timezone(name)
        now = datetime(Y,M,D,h,m,s, tzinfo=tz)
        # strfime returns a string like "-0800" or "+0430" or "0000"
        offsetKey = now.strftime('%z')
        if not zonesGroupedByOffset.has_key(offsetKey):
            zonesGroupedByOffset[offsetKey] = []
        zonesGroupedByOffset[offsetKey].append(name)
    return zonesGroupedByOffset

z = getZonesGroupedByOffset()
print z['+0000']

# Why is America/Iqaluit showing up here???

The database contains an error. Shit happens, deal with it.
 
S

shandy.b

Nah, it's got to be something more than that. A bunch of them are
screwed up. It's showing America/Saskatchewan as UTC-06:59.

I think there's something wrong with my code. I've put it up at a
pastebin so that it's easier to read.

http://pastebin.ca/1061776

I'm trying to write some code to deal with world timezones, and I'm
getting a strange result.  America/Iqaluit should not be showing up in
UTC+00:00, but it is.  Can anyone see what's wrong with this code?
import time
from datetime import datetime
import os
import pytz
def getZoneNamesOnThisComputer():
    for i in pytz.all_timezones:
        if os.path.exists( os.path.join('/tmp/usr/share/zoneinfo/',
i)):
            yield i
def getZonesGroupedByOffset():
    '''return a dict of all the zone names , grouped by their offset
    eg:
    {'-0400': ['America/Blanc-Sablon', 'Etc/GMT+4'],
     '+0000': ['America/Iqaluit', 'Etc/GMT', 'Europe/Belfast', 'GB',
'GMT'],
     ...
    }
    '''
    Y,M,D,h,m,s = time.localtime()[:6]
    zonesGroupedByOffset = {}
    for name in getZoneNamesOnThisComputer():
        tz = pytz.timezone(name)
        now = datetime(Y,M,D,h,m,s, tzinfo=tz)
        # strfime returns a string like "-0800" or "+0430" or "0000"
        offsetKey = now.strftime('%z')
        if not zonesGroupedByOffset.has_key(offsetKey):
            zonesGroupedByOffset[offsetKey] = []
        zonesGroupedByOffset[offsetKey].append(name)
    return zonesGroupedByOffset
z = getZonesGroupedByOffset()
print z['+0000']
# Why is America/Iqaluit showing up here???

The database contains an error. Shit happens, deal with it.
 
S

shandy.b

I found a solution:

http://groups.google.com/group/comp...read/thread/aea64448eaca4778/250e908652e2646d

If I use datetime.now(tz=tz) instead of datetime(Y,M,D,h,m,s,
tzinfo=tz), it works.


Nah, it's got to be something more than that.  A bunch of them are
screwed up.  It's showing America/Saskatchewan as UTC-06:59.

I think there's something wrong with my code.  I've put it up at a
pastebin so that it's easier to read.

http://pastebin.ca/1061776

I'm trying to write some code to deal with world timezones, and I'm
getting a strange result.  America/Iqaluit should not be showing up in
UTC+00:00, but it is.  Can anyone see what's wrong with this code?
import time
from datetime import datetime
import os
import pytz
def getZoneNamesOnThisComputer():
    for i in pytz.all_timezones:
        if os.path.exists( os.path.join('/tmp/usr/share/zoneinfo/',
i)):
            yield i
def getZonesGroupedByOffset():
    '''return a dict of all the zone names , grouped by their offset
    eg:
    {'-0400': ['America/Blanc-Sablon', 'Etc/GMT+4'],
     '+0000': ['America/Iqaluit', 'Etc/GMT', 'Europe/Belfast', 'GB',
'GMT'],
     ...
    }
    '''
    Y,M,D,h,m,s = time.localtime()[:6]
    zonesGroupedByOffset = {}
    for name in getZoneNamesOnThisComputer():
        tz = pytz.timezone(name)
        now = datetime(Y,M,D,h,m,s, tzinfo=tz)
        # strfime returns a string like "-0800" or "+0430" or "0000"
        offsetKey = now.strftime('%z')
        if not zonesGroupedByOffset.has_key(offsetKey):
            zonesGroupedByOffset[offsetKey] = []
        zonesGroupedByOffset[offsetKey].append(name)
    return zonesGroupedByOffset
z = getZonesGroupedByOffset()
print z['+0000']
# Why is America/Iqaluit showing up here???
The database contains an error. Shit happens, deal with it.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,024
Latest member
ARDU_PROgrammER

Latest Threads

Top