diff --git a/gallery_dl/extractor/pixiv.py b/gallery_dl/extractor/pixiv.py index 389d97fe..af29c4b5 100644 --- a/gallery_dl/extractor/pixiv.py +++ b/gallery_dl/extractor/pixiv.py @@ -42,7 +42,7 @@ class PixivExtractor(Extractor): del work["meta_pages"] work["num"] = "" work["tags"] = [tag["name"] for tag in work["tags"]] - work["date"] = text.parse_datetime(work["create_date"][:-3] + "00") + work["date"] = text.parse_datetime(work["create_date"]) work.update(metadata) yield Message.Directory, work diff --git a/gallery_dl/text.py b/gallery_dl/text.py index 0f431fd7..a21306d0 100644 --- a/gallery_dl/text.py +++ b/gallery_dl/text.py @@ -226,12 +226,15 @@ def parse_timestamp(ts, default=None): def parse_datetime(date_string, format="%Y-%m-%dT%H:%M:%S%z"): """Create a datetime object by parsing 'date_string'""" try: + if format.endswith("%z") and date_string[-3] == ":": + # workaround for Python < 3.7: +00:00 -> +0000 + date_string = date_string[:-3] + date_string[-2:] 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: + except (TypeError, IndexError, KeyError): return None except (ValueError, OverflowError): return date_string diff --git a/test/test_text.py b/test/test_text.py index b0b077e2..f33642be 100644 --- a/test/test_text.py +++ b/test/test_text.py @@ -353,9 +353,14 @@ class TestText(unittest.TestCase): def test_parse_datetime(self, f=text.parse_datetime): null = datetime.datetime.utcfromtimestamp(0) - self.assertEqual(f("1970-01-01T00:00:00+0000"), null) - self.assertEqual(f("1970.01.01", "%Y.%m.%d") , null) + self.assertEqual(f("1970-01-01T00:00:00+00:00"), null) + self.assertEqual(f("1970-01-01T00:00:00+0000") , 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), + ) self.assertEqual( f("2019-05-07T21:25:02+0900"), datetime.datetime(2019, 5, 7, 12, 25, 2),