diff --git a/test/test_utils.py b/test/test_utils.py index 72f0eb7f76..ce865511c6 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -489,6 +489,10 @@ class TestUtil(unittest.TestCase): self.assertEqual(unified_timestamp('Wednesday 31 December 1969 18:01:26 MDT'), 86) self.assertEqual(unified_timestamp('12/31/1969 20:01:18 EDT', False), 78) + self.assertEqual(unified_timestamp('2026-01-01 00:00:00', tz_offset=0), 1767225600) + self.assertEqual(unified_timestamp('2026-01-01 00:00:00', tz_offset=8), 1767196800) + self.assertEqual(unified_timestamp('2026-01-01 00:00:00 +0800', tz_offset=-5), 1767196800) + def test_determine_ext(self): self.assertEqual(determine_ext('http://example.com/foo/bar.mp4/?download'), 'mp4') self.assertEqual(determine_ext('http://example.com/foo/bar/?download', None), None) diff --git a/yt_dlp/utils/_utils.py b/yt_dlp/utils/_utils.py index b0ca950248..edbbf6c650 100644 --- a/yt_dlp/utils/_utils.py +++ b/yt_dlp/utils/_utils.py @@ -1262,7 +1262,8 @@ def unified_strdate(date_str, day_first=True): return str(upload_date) -def unified_timestamp(date_str, day_first=True): +@partial_application +def unified_timestamp(date_str, day_first=True, tz_offset=0): if not isinstance(date_str, str): return None @@ -1270,7 +1271,8 @@ def unified_timestamp(date_str, day_first=True): r'(?i)[,|]|(mon|tues?|wed(nes)?|thu(rs)?|fri|sat(ur)?|sun)(day)?', '', date_str)) pm_delta = 12 if re.search(r'(?i)PM', date_str) else 0 - timezone, date_str = extract_timezone(date_str) + timezone, date_str = extract_timezone( + date_str, default=dt.timedelta(hours=tz_offset) if tz_offset else None) # Remove AM/PM + timezone date_str = re.sub(r'(?i)\s*(?:AM|PM)(?:\s+[A-Z]+)?', '', date_str)