src/cm/utils/timezone.py
author Production Moz <dev@sopinspace.com>
Tue, 15 May 2012 14:15:34 +0200
changeset 435 96c16cc6408b
parent 275 5339e9e0e186
permissions -rw-r--r--
Fixed comments filter by name when name is empty
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
275
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
     2
from pytz import timezone, utc, UnknownTimeZoneError
0
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:
275
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    26
            try:
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    27
                # real timezone
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    28
                timez = timezone(tz)
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    29
                local_date = system_local_date.astimezone(timez)
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    30
                return local_date
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    31
            except UnknownTimeZoneError:
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    32
                # fall back to date
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    33
                return date
5339e9e0e186 ignore timezone if impossible to parse
raph
parents: 0
diff changeset
    34
                        
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        return date