当用户B的时区设置为“欧洲/维也纳”时,他将在冬季的GMT + 1和夏季的GMT + 2。 每日交货时间需要与日期结合,以了解UTC需要发送的时间。
解决方案可能是一个每日脚本,用于计算每个用户的交付日期时间,并将正确日期的芹菜任务作为ETA发送。 (我希望send_task仍然以这种方式工作)
from pytz import timezone, utc
from datetime import date, datetime
from celery.execute import send_task
def daily_delivery(delivery_time, delivery_timezone, task_name, task_args, task_kwargs):
tz = timezone(delivery_timezone)
today = date.today()
local_delivery = datetime.combine(today, delivery_time)
utc_delivery = utc.normalize(tz.localize(local_delivery).astimezone(utc))
return send_task(task_name, task, args=task_args, kwargs=task_kwargs, eta=utc_delivery)
因此,用户B有一个接口来设置他想接收电子邮件的时间? – kanu
@kanu是的,我们知道所有用户的时区 – xfx