views:

4125

answers:

6

How do I properly represent a different timezone in my timezone? The below example only works because I know that EDT is one hour ahead of me, so I can uncomment the subtraction of myTimeZone()

import datetime, re
from datetime import tzinfo

class myTimeZone(tzinfo):
    """docstring for myTimeZone"""
    def utfoffset(self, dt):
     return timedelta(hours=1)

def myDateHandler(aDateString):
    """u'Sat,  6 Sep 2008 21:16:33 EDT'"""
    _my_date_pattern = re.compile(r'\w+\,\s+(\d+)\s+(\w+)\s+(\d+)\s+(\d+)\:(\d+)\:(\d+)')
    day, month, year, hour, minute, second = _my_date_pattern.search(aDateString).groups()
    month = [
      'JAN', 'FEB', 'MAR', 
      'APR', 'MAY', 'JUN', 
      'JUL', 'AUG', 'SEP', 
      'OCT', 'NOV', 'DEC'
    ].index(month.upper()) + 1
    dt = datetime.datetime(
     int(year), int(month), int(day), 
     int(hour), int(minute), int(second)
    )     
    # dt = dt - datetime.timedelta(hours=1)
    # dt = dt - dt.tzinfo.utfoffset(myTimeZone())
    return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, 0, 0, 0)

def main():
    print myDateHandler("Sat,  6 Sep 2008 21:16:33 EDT")

if __name__ == '__main__':
    main()
+1  A: 

The Python standard library doesn't contain timezone information, because unfortunately timezone data changes a lot faster than Python. You need a third-party module for this; the usual choice is pytz

Thomas Wouters
+4  A: 

I recommend babel and pytz when working with timezones. Keep your internal datetime objects naive and in UTC and convert to your timezone for formatting only. The reason why you probably want naive objects (objects without timezone information) is that many libraries and database adapters have no idea about timezones.

Armin Ronacher
Thanks for recommending pytz.
jpartogi
A: 

The main question is how to get local timezone. Until now I have no good solutions. Does anybody know?

+1  A: 

For (the current) local timezone, you can you use:

import time
time.timezone # it returns the number of seconds, then:
time.timezone / 60 / 60
chromano
A: 

Note that pytz assumes Posix broken GMT handling. I.e, if you ask for GMT+2, you will get a time zone that is GMT minus two hour! Horror.

Jarek Przygódzki
A: 

How to get local timezone? Threre are some OS-Specific solutions (i.e /etc/timezone, win32 time zone support from pywin32), but not a single platform independent that I'm aware of.

Jarek Przygódzki