Exercise 1 solution from datetime import datetime, timezone from zoneinfo import ZoneInfo def world_clock(moment, names): for name in names: local = moment.astimezone(ZoneInfo(name)) print(f"{name:<20} {local:%Y-%m-%d %H:%M} {local.tzname():<5} offset {local.utcoffset().total_seconds() / 3600:+.2f}") moment = datetime(2026, 11, 20, 23, 30, tzinfo=timezone.utc) world_clock(moment, ["Europe/London", "Asia/Kolkata", "Pacific/Auckland", "America/Los_Angeles"]) Output (run, and exactly as shown): Europe/London 2026-11-20 23:30 GMT offset +0.00 Asia/Kolkata 2026-11-21 05:00 IST offset +5.50 Pacific/Auckland 2026-11-21 12:30 NZDT offset +13.00 America/Los_Angeles 2026-11-20 15:30 PST offset -8.00 Explanation: astimezone keeps the moment and rewrites the reading for each zone, so all four lines are the same instant. Three of the four are on a different calendar date from the UTC value or from each other, which is why a date shown to users should always be converted first. The offsets are not whole hours everywhere (+5.5), and the abbreviation and offset for a zone depend on the date: Auckland is on +13 here because it is in its summer.