def METHOD_NAME(s, tzinfo=None, now=None):
    if tzinfo is None:
        tzinfo = pytz.timezone(settings.TIME_ZONE)
    if isinstance(s, datetimetype):
        if s.tzinfo:
            return s.astimezone(tzinfo)
        return tzinfo.localize(s)
    s = s.strip().lower().replace('_','').replace(',','').replace(' ','')
    if s.isdigit():
        if len(s) == 8 and int(s[:4]) > 1900 and int(s[4:6]) < 13 and int(s[6:]) < 32:
            pass  # Fall back because its not a timestamp, its YYYYMMDD form
        else:
            return datetime.fromtimestamp(int(s),tzinfo)
    if '+' in s:
        ref,offset = s.split('+',1)
        offset = '+' + offset
    elif '-' in s:
        ref,offset = s.split('-',1)
        offset = '-' + offset
    else:
        ref,offset = s,''
    return tzinfo.normalize(parseTimeReference(ref, tzinfo, now) + parseTimeOffset(offset))