[utils] Improve parse_iso8601
This commit is contained in:
parent
4e16c1f80b
commit
52c3a6e49d
2 changed files with 11 additions and 4 deletions
|
@ -425,6 +425,8 @@ class TestUtil(unittest.TestCase):
|
||||||
self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266)
|
self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266)
|
||||||
self.assertEqual(parse_iso8601('2014-03-23T22:04:26Z'), 1395612266)
|
self.assertEqual(parse_iso8601('2014-03-23T22:04:26Z'), 1395612266)
|
||||||
self.assertEqual(parse_iso8601('2014-03-23T22:04:26.1234Z'), 1395612266)
|
self.assertEqual(parse_iso8601('2014-03-23T22:04:26.1234Z'), 1395612266)
|
||||||
|
self.assertEqual(parse_iso8601('2015-09-29T08:27:31.727'), 1443515251)
|
||||||
|
self.assertEqual(parse_iso8601('2015-09-29T08-27-31.727'), None)
|
||||||
|
|
||||||
def test_strip_jsonp(self):
|
def test_strip_jsonp(self):
|
||||||
stripped = strip_jsonp('cb ([ {"id":"532cb",\n\n\n"x":\n3}\n]\n);')
|
stripped = strip_jsonp('cb ([ {"id":"532cb",\n\n\n"x":\n3}\n]\n);')
|
||||||
|
|
|
@ -814,9 +814,11 @@ def parse_iso8601(date_str, delimiter='T', timezone=None):
|
||||||
if date_str is None:
|
if date_str is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
date_str = re.sub(r'\.[0-9]+', '', date_str)
|
||||||
|
|
||||||
if timezone is None:
|
if timezone is None:
|
||||||
m = re.search(
|
m = re.search(
|
||||||
r'(\.[0-9]+)?(?:Z$| ?(?P<sign>\+|-)(?P<hours>[0-9]{2}):?(?P<minutes>[0-9]{2})$)',
|
r'(?:Z$| ?(?P<sign>\+|-)(?P<hours>[0-9]{2}):?(?P<minutes>[0-9]{2})$)',
|
||||||
date_str)
|
date_str)
|
||||||
if not m:
|
if not m:
|
||||||
timezone = datetime.timedelta()
|
timezone = datetime.timedelta()
|
||||||
|
@ -829,9 +831,12 @@ def parse_iso8601(date_str, delimiter='T', timezone=None):
|
||||||
timezone = datetime.timedelta(
|
timezone = datetime.timedelta(
|
||||||
hours=sign * int(m.group('hours')),
|
hours=sign * int(m.group('hours')),
|
||||||
minutes=sign * int(m.group('minutes')))
|
minutes=sign * int(m.group('minutes')))
|
||||||
|
try:
|
||||||
date_format = '%Y-%m-%d{0}%H:%M:%S'.format(delimiter)
|
date_format = '%Y-%m-%d{0}%H:%M:%S'.format(delimiter)
|
||||||
dt = datetime.datetime.strptime(date_str, date_format) - timezone
|
dt = datetime.datetime.strptime(date_str, date_format) - timezone
|
||||||
return calendar.timegm(dt.timetuple())
|
return calendar.timegm(dt.timetuple())
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def unified_strdate(date_str, day_first=True):
|
def unified_strdate(date_str, day_first=True):
|
||||||
|
|
Loading…
Reference in a new issue