summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Morega <alex@grep.ro>2014-01-06 21:55:27 +0200
committerAlex Morega <alex@grep.ro>2014-01-06 21:55:49 +0200
commit88c564228d30a6cda6368cf2077341fea0c6c6d2 (patch)
treed7591c58d2c234f776372cb74b64aeb7a4c53905
parent1df64dfe5d9e10f6725362d467278c5eb02e5162 (diff)
downloadbabel-88c564228d30a6cda6368cf2077341fea0c6c6d2.tar.gz
parse datetime values with no timezone info
fixes #56
-rw-r--r--babel/messages/catalog.py35
-rw-r--r--tests/messages/test_catalog.py14
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