diff --git a/docs/formatting.md b/docs/formatting.md index 58c609d1..d6ca913e 100644 --- a/docs/formatting.md +++ b/docs/formatting.md @@ -140,6 +140,12 @@ Conversion specifiers allow to *convert* the value to a different form or type. {created!d} 2010-01-01 00:00:00 + + D + Convert a Unix timestamp or ISO 8601 string to a datetime object + {created!D} + 2010-01-01 00:00:00 + U Convert HTML entities diff --git a/gallery_dl/formatter.py b/gallery_dl/formatter.py index 6affc3eb..d8dc0537 100644 --- a/gallery_dl/formatter.py +++ b/gallery_dl/formatter.py @@ -488,6 +488,7 @@ _CONVERSIONS = { "L": len, "T": util.datetime_to_timestamp_string, "d": text.parse_timestamp, + "D": util.to_datetime, "U": text.unescape, "H": lambda s: text.unescape(text.remove_html(s)), "g": text.slugify, diff --git a/test/test_formatter.py b/test/test_formatter.py index 646f1795..c2bc2840 100644 --- a/test/test_formatter.py +++ b/test/test_formatter.py @@ -32,7 +32,7 @@ class TestFormatter(unittest.TestCase): "h": "

foo

& bar

", "u": "'< / >'", "t": 1262304000, - "ds": "2010-01-01T01:00:00+0100", + "ds": "2010-01-01T01:00:00+01:00", "dt": datetime.datetime(2010, 1, 1), "dt_dst": datetime.datetime(2010, 6, 1), "i_str": "12345", @@ -65,6 +65,13 @@ class TestFormatter(unittest.TestCase): self._run_test("{n!S}", "") self._run_test("{t!d}", datetime.datetime(2010, 1, 1)) self._run_test("{t!d:%Y-%m-%d}", "2010-01-01") + self._run_test("{t!D}" , datetime.datetime(2010, 1, 1)) + if sys.hexversion >= 0x3070000: + self._run_test("{ds!D}", datetime.datetime(2010, 1, 1)) + else: + self._run_test("{ds!D}", datetime.datetime(1970, 1, 1)) + self._run_test("{dt!D}", datetime.datetime(2010, 1, 1)) + self._run_test("{t!D:%Y-%m-%d}", "2010-01-01") self._run_test("{dt!T}", "1262304000") self._run_test("{l!j}", '["a","b","c"]') self._run_test("{dt!j}", '"2010-01-01 00:00:00"') @@ -232,7 +239,7 @@ class TestFormatter(unittest.TestCase): def test_datetime(self): self._run_test("{ds:D%Y-%m-%dT%H:%M:%S%z}", "2010-01-01 00:00:00") - self._run_test("{ds:D%Y}", "2010-01-01T01:00:00+0100") + self._run_test("{ds:D%Y}", "2010-01-01T01:00:00+01:00") self._run_test("{l:D%Y}", "None") def test_offset(self): @@ -488,10 +495,10 @@ def noarg(): fmt4 = formatter.parse("\fM " + path + ":lengths") self.assertEqual(fmt1.format_map(self.kwdict), "'Title' by Name") - self.assertEqual(fmt2.format_map(self.kwdict), "136") + self.assertEqual(fmt2.format_map(self.kwdict), "137") self.assertEqual(fmt3.format_map(self.kwdict), "'Title' by Name") - self.assertEqual(fmt4.format_map(self.kwdict), "136") + self.assertEqual(fmt4.format_map(self.kwdict), "137") with self.assertRaises(TypeError): self.assertEqual(fmt0.format_map(self.kwdict), "")