Exercise 1 solution from datetime import datetime, date, time, timedelta, timezone from zoneinfo import ZoneInfo UTC = timezone.utc def resolve(d, t, zone): z = ZoneInfo(zone) return datetime.combine(d, t, tzinfo=z).astimezone(UTC).astimezone(z) def weekly(start, t, zone, weekdays, count): out, d = [], start while len(out) < count: if d.weekday() in weekdays: out.append(resolve(d, t, zone)) d += timedelta(days=1) return out for o in weekly(date(2026, 10, 27), time(10), "America/New_York", {1, 3}, 6): u = o.astimezone(UTC) lon = o.astimezone(ZoneInfo("Europe/London")) print(o.strftime("%a %d %b %H:%M %Z"), "|", u.strftime("%H:%M UTC"), "|", lon.strftime("%H:%M %Z")) Output (run, and exactly as shown): Tue 27 Oct 10:00 EDT | 14:00 UTC | 14:00 GMT Thu 29 Oct 10:00 EDT | 14:00 UTC | 14:00 GMT Tue 03 Nov 10:00 EST | 15:00 UTC | 15:00 GMT Thu 05 Nov 10:00 EST | 15:00 UTC | 15:00 GMT Tue 10 Nov 10:00 EST | 15:00 UTC | 15:00 GMT Thu 12 Nov 10:00 EST | 15:00 UTC | 15:00 GMT Explanation: the rule is "10:00 in New York", so the wall time never changes and the UTC instant does. The United States moved its clocks back on 1 November 2026, so 10:00 is UTC-4 (14:00 UTC) before that date and UTC-5 (15:00 UTC) after it. The United Kingdom had already moved back on 25 October, so for London the same meeting is 14:00 on both of the first two dates (the gap between the two countries was one hour shorter than usual for a week) and 15:00 afterwards, in step with New York. Generating each occurrence from the local date and then converting, rather than adding 7 days to one UTC instant, is what keeps the meeting at 10:00 for the people in New York.