summaryrefslogtreecommitdiff
path: root/dateutil/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'dateutil/parser.py')
-rw-r--r--dateutil/parser.py23
1 files changed, 15 insertions, 8 deletions
diff --git a/dateutil/parser.py b/dateutil/parser.py
index 951c09e..b1b7cc2 100644
--- a/dateutil/parser.py
+++ b/dateutil/parser.py
@@ -361,9 +361,11 @@ class parser(object):
# Check if it's a number
try:
- value = float(l[i])
+ value_repr = l[i]
+ value = float(value_repr)
except ValueError:
value = None
+
if value is not None:
# Token is a number
len_li = len(l[i])
@@ -387,8 +389,7 @@ class parser(object):
# 19990101T235959[.59]
res.hour = int(s[:2])
res.minute = int(s[2:4])
- value = float(s[4:])
- res.second, res.microsecond = _parsems(value)
+ res.second, res.microsecond = _parsems(s[4:])
elif len_li == 8:
# YYYYMMDD
s = l[i-1]
@@ -422,13 +423,15 @@ class parser(object):
if value%1:
res.second = int(60*(value%1))
elif idx == 2:
- res.second, res.microsecond = _parsems(value)
+ res.second, res.microsecond = \
+ _parsems(value_repr)
i += 1
if i >= len_l or idx == 2:
break
# 12h00
try:
- value = float(l[i])
+ value_repr = l[i]
+ value = float(value_repr)
except ValueError:
break
else:
@@ -448,8 +451,7 @@ class parser(object):
res.second = int(60*(value%1))
i += 1
if i < len_l and l[i] == ':':
- value = float(l[i+1])
- res.second, res.microsecond = _parsems(value)
+ res.second, res.microsecond = _parsems(l[i+1])
i += 2
elif i < len_l and l[i] in ('-', '/', '.'):
sep = l[i]
@@ -871,7 +873,12 @@ def _parsetz(tzstr):
def _parsems(value):
- return int(value), int(value * 1000000) - int(value) * 1000000
+ """Parse a I[.F] seconds value into (seconds, microseconds)."""
+ if "." not in value:
+ return int(value), 0
+ else:
+ i, f = value.split(".")
+ return int(i), int(f.ljust(6, "0")[:6])
# vim:ts=4:sw=4:et