|
2 | 2 | import os
|
3 | 3 | import os.path
|
4 | 4 | import uuid
|
| 5 | +import pytz |
5 | 6 | from collections import defaultdict
|
6 | 7 | from urllib.parse import urlencode
|
7 | 8 |
|
@@ -753,7 +754,7 @@ def get_schedule_url(self):
|
753 | 754 |
|
754 | 755 | url = event.schedule.get_absolute_url()
|
755 | 756 | slug = urlencode({'selected': self.slug})
|
756 |
| - time = event.start_time.strftime('%H:%M-UTC') |
| 757 | + time = event.get_utc_start_datetime().strftime('%H:%M-UTC') |
757 | 758 | return f"{url}?{slug}#{time}"
|
758 | 759 |
|
759 | 760 | def get_slides_url(self):
|
@@ -1182,11 +1183,45 @@ def get_duration(self):
|
1182 | 1183 | return 0
|
1183 | 1184 |
|
1184 | 1185 | def get_time_range(self):
|
| 1186 | + |
| 1187 | + """ Return time range of the event in local time. |
| 1188 | + |
| 1189 | + """ |
1185 | 1190 | n = datetime.datetime.combine(self.schedule.date, self.start_time)
|
1186 | 1191 | return (
|
1187 | 1192 | n, (n + datetime.timedelta(seconds=self.get_duration() * 60))
|
1188 | 1193 | )
|
1189 | 1194 |
|
| 1195 | + def get_utc_start_datetime(self): |
| 1196 | + |
| 1197 | + """ Return start time as datetime in UTC. |
| 1198 | + |
| 1199 | + """ |
| 1200 | + dt = datetime.datetime.combine(self.schedule.date, self.start_time) |
| 1201 | + return dt.astimezone(datetime.timezone.utc) |
| 1202 | + |
| 1203 | + def get_utc_end_datetime(self): |
| 1204 | + |
| 1205 | + """ Return end time as datetime in UTC. |
| 1206 | + |
| 1207 | + """ |
| 1208 | + return self.get_utc_start_datetime() + datetime.timedelta( |
| 1209 | + seconds=self.get_duration() * 60) |
| 1210 | + |
| 1211 | + def get_schedule_string(self): |
| 1212 | + |
| 1213 | + """ Return a text representation of the scheduled slot. |
| 1214 | + |
| 1215 | + """ |
| 1216 | + (start, end) = self.get_time_range() |
| 1217 | + duration = self.get_duration() |
| 1218 | + tz = pytz.timezone(settings.TIME_ZONE) |
| 1219 | + end = tz.localize(end) |
| 1220 | + return ( |
| 1221 | + f'{start.strftime("%a, %b %d, %H:%M")}-' |
| 1222 | + f'{end.strftime("%H:%M %Z")} ({duration} min)' |
| 1223 | + ) |
| 1224 | + |
1190 | 1225 | def get_description(self):
|
1191 | 1226 | if self.talk:
|
1192 | 1227 | return self.talk.title
|
|
0 commit comments