src/cm/utils/timezone.py
author Philippe Aigrain <philippe.aigrain@sopinspace.com>
Mon, 18 Jan 2010 14:33:41 +0100
changeset 101 d8055f2280e8
parent 0 40c8f766c9b8
child 275 5339e9e0e186
permissions -rw-r--r--
additional info contrib and licenses
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
from datetime import timedelta
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from pytz import timezone, utc
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
from django.conf import settings
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
local_tz = timezone(settings.TIME_ZONE)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
def request_tz_convert(date, request):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
    return tz_convert(date, request.session.get('tz',None))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
def tz_convert(date, tz):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
    Convert date to time zone
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
    tz can be;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
        - '-2' (relative to utc)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
        - 'Paris/Europe' real timezone like (cf pytz)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
    if tz:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
        system_local_date = local_tz.localize(date)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
             # simple utc delta?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
            utc_offset = int(tz)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
            utc_time = system_local_date.astimezone(utc)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
            res = utc.normalize(utc_time + timedelta(hours=utc_offset))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
            return res
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
        except:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
            # real timezone
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
            timez = timezone(tz)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
            local_date = system_local_date.astimezone(timez)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
            return local_date            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        return date