src/cm/utils/timezone.py
author gibus
Wed, 27 Mar 2013 17:51:18 +0100
changeset 502 8ec189cc214d
parent 275 5339e9e0e186
permissions -rw-r--r--
do not skip span for newline textnodes otherwise compute_new_comment_positions() will return bad results for pandoc texts.

from datetime import timedelta
from pytz import timezone, utc, UnknownTimeZoneError
from django.conf import settings

local_tz = timezone(settings.TIME_ZONE)

def request_tz_convert(date, request):
    return tz_convert(date, request.session.get('tz',None))

def tz_convert(date, tz):
    """
    Convert date to time zone
    tz can be;
        - '-2' (relative to utc)
        - 'Paris/Europe' real timezone like (cf pytz)
    """
    if tz:
        system_local_date = local_tz.localize(date)
        try:
             # simple utc delta?
            utc_offset = int(tz)
            utc_time = system_local_date.astimezone(utc)
            res = utc.normalize(utc_time + timedelta(hours=utc_offset))
            return res
        except:
            try:
                # real timezone
                timez = timezone(tz)
                local_date = system_local_date.astimezone(timez)
                return local_date
            except UnknownTimeZoneError:
                # fall back to date
                return date
                        
    else:
        return date