From e2bc777f7f988cba945c027aaa27d98aa3913a71 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Tue, 23 Jan 2018 20:45:16 +0100 Subject: Bon fuseau horaire dans les ICS. Les bases de données stockent et renvoient seulement des dates en UTC. Django inscrit cette information dans les objets datetime, par conséquent les dates inscrites sur les templates étaient automatiquement converties à l’heure indiquée dans la configuration. Or, les ICS sont générées avec une librairie tierce (icalendar), et ne tient donc pas compte de la configuration de Django. Le module inscrit donc des dates UTC dans les ICS. C’est sans conséquences, car l’heure est correcte, juste décalée avec une information de fuseau horaire. Un bon client iCalendar est censé convertir les heures de lui-même en fonction des préférences du systèmes. Seulement certains d’entre eux affichent aussi le fuseau horaire d’origine. --- feeds.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/feeds.py b/feeds.py index dde051b..bcbf7f9 100644 --- a/feeds.py +++ b/feeds.py @@ -21,6 +21,7 @@ from django.db.models.functions import ExtractWeek, ExtractYear from django.template import loader from django.urls import reverse from django.utils.feedgenerator import Atom1Feed, SyndicationFeed +from django.utils.timezone import localtime from icalendar import Calendar, Event @@ -86,9 +87,9 @@ class IcalFeed(Feed): def item_extra_kwargs(self, item): return {"uid": "{0}@celcatsanitizer".format(item.id), - "dtstart": item.begin, - "dtend": item.end, - "dtstamp": item.last_update, + "dtstart": localtime(item.begin), + "dtend": localtime(item.end), + "dtstamp": localtime(item.last_update), "summary": self.item_summary(item), "location": format_rooms(item.rooms.all())} -- cgit v1.2.1