diff options
author | Alex Morega <alex@grep.ro> | 2014-01-06 21:55:27 +0200 |
---|---|---|
committer | Alex Morega <alex@grep.ro> | 2014-01-06 21:55:49 +0200 |
commit | 88c564228d30a6cda6368cf2077341fea0c6c6d2 (patch) | |
tree | d7591c58d2c234f776372cb74b64aeb7a4c53905 | |
parent | 1df64dfe5d9e10f6725362d467278c5eb02e5162 (diff) | |
download | babel-88c564228d30a6cda6368cf2077341fea0c6c6d2.tar.gz |
parse datetime values with no timezone info
fixes #56
-rw-r--r-- | babel/messages/catalog.py | 35 | ||||
-rw-r--r-- | tests/messages/test_catalog.py | 14 |
2 files changed, 33 insertions, 16 deletions
diff --git a/babel/messages/catalog.py b/babel/messages/catalog.py index 756d64c..67c5425 100644 --- a/babel/messages/catalog.py +++ b/babel/messages/catalog.py @@ -41,32 +41,35 @@ PYTHON_FORMAT = re.compile(r'''(?x) def _parse_datetime_header(value): - match = re.match(r'^(?P<datetime>.*)(?P<tzoffset>[+-]\d{4})$', value) + match = re.match(r'^(?P<datetime>.*?)(?P<tzoffset>[+-]\d{4})?$', value) tt = time.strptime(match.group('datetime'), '%Y-%m-%d %H:%M') ts = time.mktime(tt) + dt = datetime.fromtimestamp(ts) # Separate the offset into a sign component, hours, and # minutes tzoffset = match.group('tzoffset') - plus_minus_s, rest = tzoffset[0], tzoffset[1:] - hours_offset_s, mins_offset_s = rest[:2], rest[2:] + if tzoffset is not None: + plus_minus_s, rest = tzoffset[0], tzoffset[1:] + hours_offset_s, mins_offset_s = rest[:2], rest[2:] - # Make them all integers - plus_minus = int(plus_minus_s + '1') - hours_offset = int(hours_offset_s) - mins_offset = int(mins_offset_s) + # Make them all integers + plus_minus = int(plus_minus_s + '1') + hours_offset = int(hours_offset_s) + mins_offset = int(mins_offset_s) - # Calculate net offset - net_mins_offset = hours_offset * 60 - net_mins_offset += mins_offset - net_mins_offset *= plus_minus + # Calculate net offset + net_mins_offset = hours_offset * 60 + net_mins_offset += mins_offset + net_mins_offset *= plus_minus - # Create an offset object - tzoffset = FixedOffsetTimezone(net_mins_offset) + # Create an offset object + tzoffset = FixedOffsetTimezone(net_mins_offset) - # Store the offset in a datetime object - dt = datetime.fromtimestamp(ts) - return dt.replace(tzinfo=tzoffset) + # Store the offset in a datetime object + dt = dt.replace(tzinfo=tzoffset) + + return dt class Message(object): diff --git a/tests/messages/test_catalog.py b/tests/messages/test_catalog.py index fcac34d..aac71ee 100644 --- a/tests/messages/test_catalog.py +++ b/tests/messages/test_catalog.py @@ -454,3 +454,17 @@ def test_catalog_update(): assert not 'head' in cat assert list(cat.obsolete.values())[0].id == 'head' + + +def test_datetime_parsing(): + val1 = catalog._parse_datetime_header('2006-06-28 23:24+0200') + assert val1.year == 2006 + assert val1.month == 6 + assert val1.day == 28 + assert val1.tzinfo.zone == 'Etc/GMT+120' + + val2 = catalog._parse_datetime_header('2006-06-28 23:24') + assert val2.year == 2006 + assert val2.month == 6 + assert val2.day == 28 + assert val2.tzinfo is None |