src/cm/utils/timezone.py
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 275 5339e9e0e186
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
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