From d09864b581e2a55b0da7effe4e11bc2b7de170c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Wed, 8 May 2019 00:00:00 +0200 Subject: [PATCH] implement text.parse_datetime() --- gallery_dl/text.py | 14 ++++++++++++++ test/test_text.py | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/gallery_dl/text.py b/gallery_dl/text.py index 7cb5e9f9..0f431fd7 100644 --- a/gallery_dl/text.py +++ b/gallery_dl/text.py @@ -223,6 +223,20 @@ def parse_timestamp(ts, default=None): 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": clean_path = clean_path_windows else: diff --git a/test/test_text.py b/test/test_text.py index 450e57f3..037359de 100644 --- a/test/test_text.py +++ b/test/test_text.py @@ -350,6 +350,21 @@ class TestText(unittest.TestCase): self.assertEqual(f(value), None) 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__': unittest.main()