From 79deeb34fe8fb217b09c4c20c2b3d8c315eb2456 Mon Sep 17 00:00:00 2001 From: Lukasz Gabrych Date: Tue, 7 Apr 2020 19:37:56 +0200 Subject: [PATCH 1/2] Properly convert datetime from backend. Fix: #323, Fix: #330 --- django_celery_beat/schedulers.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/django_celery_beat/schedulers.py b/django_celery_beat/schedulers.py index e65ac712..caedf8f7 100644 --- a/django_celery_beat/schedulers.py +++ b/django_celery_beat/schedulers.py @@ -2,6 +2,7 @@ import datetime import logging import math +import pytz from multiprocessing.util import Finalize @@ -130,6 +131,21 @@ def is_due(self): self.model.save() return schedules.schedstate(False, None) # Don't recheck + # When Django settings USE_TZ is False and Django settings TIME_ZONE is set + # value of TIME_ZINE is the time zone in which Django will store all datetimes. + # Because of that if datetime is naive we should use it as source timezone + # celery.utils.time.maybe_make_aware - always convert naive datetime to UTC + # which may be wrong in Django sicase. + django_timezone = getattr(settings, 'TIME_ZONE', None) + django_use_tz = getattr(settings, 'USE_TZ', None) + if (not django_use_tz + and django_timezone + and self.last_run_at.tzinfo is None + and self.app.timezone): + source_timezone = pytz.timezone(django_timezone) + last_run_at_django_tz = source_timezone.localize(self.last_run_at) + self.last_run_at = last_run_at_django_tz.astimezone(self.app.timezone) + # CAUTION: make_aware assumes settings.TIME_ZONE for naive datetimes, # while maybe_make_aware assumes utc for naive datetimes tz = self.app.timezone From 973c587c5fe3575b37f3dcd3c838049ea4f093ad Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 09:55:56 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- django_celery_beat/schedulers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_celery_beat/schedulers.py b/django_celery_beat/schedulers.py index bea6f625..7789da0a 100644 --- a/django_celery_beat/schedulers.py +++ b/django_celery_beat/schedulers.py @@ -2,9 +2,9 @@ import datetime import logging import math -import pytz from multiprocessing.util import Finalize +import pytz from celery import current_app, schedules from celery.beat import ScheduleEntry, Scheduler from celery.utils.log import get_logger