implement text.parse_datetime()
This commit is contained in:
@@ -223,6 +223,20 @@ def parse_timestamp(ts, default=None):
|
|||||||
return default
|
return default
|
||||||
|
|
||||||
|
|
||||||
|
def parse_datetime(date_string, format="%Y-%m-%dT%H:%M:%S%z"):
|
||||||
|
"""Create a datetime object by parsing 'date_string'"""
|
||||||
|
try:
|
||||||
|
d = datetime.datetime.strptime(date_string, format)
|
||||||
|
o = d.utcoffset()
|
||||||
|
if o is not None:
|
||||||
|
d = d.replace(tzinfo=None) - o # convert to naive UTC
|
||||||
|
return d
|
||||||
|
except TypeError:
|
||||||
|
return None
|
||||||
|
except (ValueError, OverflowError):
|
||||||
|
return date_string
|
||||||
|
|
||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
clean_path = clean_path_windows
|
clean_path = clean_path_windows
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -350,6 +350,21 @@ class TestText(unittest.TestCase):
|
|||||||
self.assertEqual(f(value), None)
|
self.assertEqual(f(value), None)
|
||||||
self.assertEqual(f(value, "foo"), "foo")
|
self.assertEqual(f(value, "foo"), "foo")
|
||||||
|
|
||||||
|
def test_parse_datetime(self, f=text.parse_datetime):
|
||||||
|
null = datetime.datetime.utcfromtimestamp(0)
|
||||||
|
|
||||||
|
self.assertEqual(f("1970-01-01T00:00:00+00:00"), null)
|
||||||
|
self.assertEqual(f("1970.01.01", "%Y.%m.%d") , null)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
f("2019-05-07T21:25:02+09:00"),
|
||||||
|
datetime.datetime(2019, 5, 7, 12, 25, 2),
|
||||||
|
)
|
||||||
|
|
||||||
|
for value in INVALID:
|
||||||
|
self.assertEqual(f(value), None)
|
||||||
|
self.assertEqual(f("1970.01.01"), "1970.01.01")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user