diff --git a/dateparser/freshness_date_parser.py b/dateparser/freshness_date_parser.py index 17a4ebb80..38314b078 100644 --- a/dateparser/freshness_date_parser.py +++ b/dateparser/freshness_date_parser.py @@ -1,4 +1,4 @@ -from datetime import datetime, time +from datetime import datetime, time, timezone import regex as re from dateutil.relativedelta import relativedelta @@ -86,7 +86,7 @@ def apply_time(dateobj, timeobj): else: if "local" not in _settings_tz: - utc_dt = datetime.utcnow() + utc_dt = datetime.now(tz=timezone.utc) now = apply_timezone(utc_dt, settings.TIMEZONE) else: now = datetime.now(self.get_local_tz()) diff --git a/dateparser/parser.py b/dateparser/parser.py index 3f7fedb43..297e73f3b 100644 --- a/dateparser/parser.py +++ b/dateparser/parser.py @@ -1,6 +1,6 @@ import calendar from collections import OrderedDict -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from io import StringIO import pytz @@ -437,7 +437,7 @@ def _get_correct_leap_year(self, prefer_dates_from, current_year): def _set_relative_base(self): self.now = self.settings.RELATIVE_BASE if not self.now: - self.now = datetime.utcnow() + self.now = datetime.now(tz=timezone.utc).replace(tzinfo=None) def _get_datetime_obj_params(self): if not self.now: diff --git a/dateparser/timezone_parser.py b/dateparser/timezone_parser.py index 51ae6dd50..c7a284ecb 100644 --- a/dateparser/timezone_parser.py +++ b/dateparser/timezone_parser.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta, tzinfo +from datetime import datetime, timedelta, timezone, tzinfo import regex as re @@ -80,7 +80,7 @@ def get_offset(tz_obj, regex, repl="", replw=""): def get_local_tz_offset(): - offset = datetime.now() - datetime.utcnow() + offset = datetime.now() - datetime.now(tz=timezone.utc).replace(tzinfo=None) offset = timedelta(days=offset.days, seconds=round(offset.seconds, -1)) return offset diff --git a/tests/test_freshness_date_parser.py b/tests/test_freshness_date_parser.py index 0bfa501fe..05cd5f19c 100644 --- a/tests/test_freshness_date_parser.py +++ b/tests/test_freshness_date_parser.py @@ -38,11 +38,9 @@ def setUp(self): settings.TIMEZONE = "utc" - def now_with_timezone(self, tzinfo): + def now_with_timezone(self, tz): now = self.now - return datetime( - now.year, now.month, now.day, now.hour, now.minute, tzinfo=tzinfo - ) + return datetime(now.year, now.month, now.day, now.hour, now.minute, tzinfo=tz) @parameterized.expand( [ @@ -2621,7 +2619,6 @@ def wrapped(*args, **kwargs): self.freshness_parser = Mock(wraps=freshness_date_parser) dt_mock = Mock(wraps=dateparser.freshness_date_parser.datetime) - dt_mock.utcnow = Mock(return_value=self.now) dt_mock.now = Mock(side_effect=self.now_with_timezone) self.add_patch(patch("dateparser.freshness_date_parser.datetime", new=dt_mock)) self.add_patch( diff --git a/tests/test_search.py b/tests/test_search.py index 9d4a93334..9d0b72e63 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -597,19 +597,31 @@ def test_search_and_parse(self, shortname, string, expected, settings=None): ( "May 2020", datetime.datetime( - 2020, 5, datetime.datetime.utcnow().day, 0, 0 + 2020, + 5, + datetime.datetime.now(tz=datetime.timezone.utc).day, + 0, + 0, ), ), ( "July 2020", datetime.datetime( - 2020, 7, datetime.datetime.utcnow().day, 0, 0 + 2020, + 7, + datetime.datetime.now(tz=datetime.timezone.utc).day, + 0, + 0, ), ), ( "2023", datetime.datetime( - 2023, 7, datetime.datetime.utcnow().day, 0, 0 + 2023, + 7, + datetime.datetime.now(tz=datetime.timezone.utc).day, + 0, + 0, ), ), ( @@ -617,7 +629,7 @@ def test_search_and_parse(self, shortname, string, expected, settings=None): datetime.datetime( 2023, 1, - datetime.datetime.utcnow().day, + datetime.datetime.now(tz=datetime.timezone.utc).day, 0, 0, tzinfo=pytz.utc, diff --git a/tests/test_timezone_parser.py b/tests/test_timezone_parser.py index 50f062bc2..c1aeb2b43 100644 --- a/tests/test_timezone_parser.py +++ b/tests/test_timezone_parser.py @@ -1,3 +1,4 @@ +import datetime as dt from datetime import datetime, timedelta from unittest.mock import Mock, patch @@ -133,17 +134,10 @@ def setUp(self): ] ) def test_timezone_offset_calculation(self, utc, local, offset): - self.given_utc_time(utc) - self.given_local_time(local) + self.given_time(utc, local) self.when_offset_popped_from_string() self.then_offset_is(offset) - def given_utc_time(self, datetime_string): - self._given_time(datetime_string, "utcnow") - - def given_local_time(self, datetime_string): - self._given_time(datetime_string, "now") - def when_offset_popped_from_string(self): self.timezone_offset = get_local_tz_offset() @@ -155,12 +149,21 @@ def then_offset_is(self, expected_offset): ) self.assertEqual(delta, self.timezone_offset) - def _given_time(self, datetime_string, getter_name): + def given_time(self, utc_dt_string, local_dt_string): datetime_cls = dateparser.timezone_parser.datetime if not isinstance(datetime_cls, Mock): datetime_cls = Mock(wraps=datetime) - datetime_obj = datetime.strptime(datetime_string, "%Y-%m-%d %H:%M") - setattr(datetime_cls, getter_name, Mock(return_value=datetime_obj)) + utc_dt_obj = datetime.strptime(utc_dt_string, "%Y-%m-%d %H:%M").astimezone( + dt.timezone.utc + ) + local_dt_obj = datetime.strptime(local_dt_string, "%Y-%m-%d %H:%M") + + def _dt_now(tz=None): + if tz == dt.timezone.utc: + return utc_dt_obj + return local_dt_obj + + datetime_cls.now = Mock(side_effect=_dt_now) self.add_patch(patch("dateparser.timezone_parser.datetime", new=datetime_cls))