Do not extract timestamp on 3.8 if timezone is not present

This commit is contained in:
coletdjnz 2024-05-04 21:46:31 +12:00
parent a7e0a8452b
commit a1af9ffe27
No known key found for this signature in database
GPG Key ID: 91984263BB39894A
3 changed files with 8 additions and 3 deletions

View File

@ -28,6 +28,7 @@ from yt_dlp.utils import (
ExtractorError,
InAdvancePagedList,
LazyList,
NO_DEFAULT,
OnDemandPagedList,
Popen,
age_restricted,
@ -771,6 +772,7 @@ class TestUtil(unittest.TestCase):
self.assertEqual(parse_iso8601('2014-03-23T23:04:26+0100'), 1395612266)
self.assertEqual(parse_iso8601('2014-03-23T23:04:26-07:00'), 1395641066)
self.assertEqual(parse_iso8601('2014-03-23T23:04:26', timezone=dt.timedelta(hours=-7)), 1395641066)
self.assertEqual(parse_iso8601('2014-03-23T23:04:26', timezone=NO_DEFAULT), None)
# default does not override timezone in date_str
self.assertEqual(parse_iso8601('2014-03-23T23:04:26-07:00', timezone=dt.timedelta(hours=-10)), 1395641066)
self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266)

View File

@ -4557,7 +4557,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
# Python 3.8 should be deprecated soon
# This fallback may make the timestamp slightly inaccurate for 3.8 users.
if sys.version_info < (3, 9):
return dt.timedelta(hours=-7)
return NO_DEFAULT
from zoneinfo import ZoneInfo
return dt.datetime.now(ZoneInfo('US/Pacific')).utcoffset()

View File

@ -1162,7 +1162,10 @@ def extract_timezone(date_str, default=None):
hours=sign * int(m.group('hours')),
minutes=sign * int(m.group('minutes')))
return timezone or default or dt.timedelta(), date_str
if timezone is None and default is not NO_DEFAULT:
timezone = default or dt.timedelta()
return timezone, date_str
def parse_iso8601(date_str, delimiter='T', timezone=None):
@ -1175,7 +1178,7 @@ def parse_iso8601(date_str, delimiter='T', timezone=None):
timezone, date_str = extract_timezone(date_str, timezone)
with contextlib.suppress(ValueError):
with contextlib.suppress(ValueError, TypeError):
date_format = f'%Y-%m-%d{delimiter}%H:%M:%S'
dt_ = dt.datetime.strptime(date_str, date_format) - timezone
return calendar.timegm(dt_.timetuple())