The problem you are describing is solved by saving/persisting times in UTC. The calendar will display the event by using the user's current timezone and the UTC time to determine local time.
Consider a Doctor's appointment for Dec 20, 2026 2pm in Calgary. Regardless of whether its booked a year ahead (ie before the new time zone rules were decided) or a week ahead (after the rules were decided, and consequently a different UTC time), the expectation is that it will be at at 2pm local time.