diff --git a/TODO.txt b/TODO.txt index a9a6e3a..6b7b399 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,5 +1,4 @@ - FIX: validation for first_day -- FIX: no timezone on pre_meeting - Test event list export diff --git a/dav_events/converters.py b/dav_events/converters.py index c4e3f85..3a09a34 100644 --- a/dav_events/converters.py +++ b/dav_events/converters.py @@ -1,5 +1,6 @@ import datetime import logging +import pytz import re from six import string_types @@ -21,7 +22,7 @@ class Iso8601Serializer(object): r':(?P[0-5][0-9])' r'([,.]\d{1,10})?' r')?' - r'(?P[\-+](([01][0-9])|(2[0123]))(:[0-5][0-9])?)?$') + r'(?P(?P[\-+])(?P([01][0-9])|(2[0123]))(:(?P[0-5][0-9]))?)?$') def __init__(self, instance=None, text=None): if instance is not None: @@ -66,6 +67,17 @@ class Iso8601Serializer(object): else: value = datetime.datetime(int(gd['year']), int(gd['mon']), int(gd['day']), hour=int(gd['hour']), minute=int(gd['min']), second=int(gd['sec'])) + if gd['offset'] is not None: + offset = datetime.timedelta(hours=int(gd['offhours'])) + if gd['offmins'] is not None: + offset += datetime.timedelta(minutes=int(gd['offmins'])) + if gd['offdir'] == '+': + value -= offset + elif gd['offdir'] == '-': + value += offset + else: + raise ValueError('Offset format not recognized \'{str}\''.format(str=gd['offset'])) + value = value.replace(tzinfo=pytz.UTC) elif not ignore_unsupported_input: raise ValueError('Format not recognized \'{str}\''.format(str=haystack)) elif not ignore_unsupported_input: diff --git a/setup.py b/setup.py index f397e0e..ef3055c 100644 --- a/setup.py +++ b/setup.py @@ -121,6 +121,7 @@ setup( 'django-bootstrap3', 'django-countries', 'django-datetime-widget', + 'pytz', 'selenium', 'coverage', ],