In Android, calendar event times are stored in Unix Time (as milliseconds since January 1, 1970, Coordinated Universal Time - UTC). Additionally, for timed events, the timezone of the actual event location is set (all-day events are always stored in UTC).
Timezones are given as Olson string, e.g. Europe/Berlin or America/New_York. The definition for these timezones (offset from UTC as well as whether and when daylight savings is observed) is stored in Android.
Some (broken) cloud sync adapters will set timezones incorrectly to timezones like GMT+1. While this looks correct at first when you are in central Europe, it will break your recurring events as soon as daylight savings is observed and clocks are changed from Central European Time (CET/GMT+1) to Central European Summer Time (CEST/GMT+2).
Timezone definition changes
Timezone definitions sometimes change (recent examples are Turkey, Russia, and Brazil; the EU is currently discussing changes), which leads to problems (especially when such changes are announced last-minute) as every digital device that works with timezones needs to update the definitions accordingly (and many older devices do not receive updates anymore).
The latest timezone information is published by IANA here.
Timezone definitions in Android
Android uses timezone definitions from the underlying Linux kernel. Thus, originally, timezones could only be updated as part of a firmware update. Since Android 8.1, OEMs can push timezone definitions as APK/APEX to the user (or for Pixel devices, it is available in Play Store). For older Android versions or when the manufacturer fails to update the timezone information, there are 3rd party apps in Google Play to update the timezone data (but the device needs to be rooted for some).
aCalendar shows the current version code (e.g. 2019b) of the installed timezone definition in aCalendar settings - timezones - device timezone.
Timezones in aCalendar
In normal use cases, the user should not see any timezone information or set a timezone. aCalendar will create (non-all-day) events in the local timezone (or home timezone, if home timezone is enabled in timezone settings). aCalendar will usually not show this default timezone, neither in event details nor in the event editor.
When events are stored in a different timezone than the local (or home) timezone, aCalendar will show the event according to the timezone settings (local time by default) across all calendar views. The world icon in front of the time indicates the difference in timezones.
In the event details and the event editor, times are given in both time zones.
Automatic Timezone (failures)
Usually, one should always use automatic time and timezone detection from the phone network. But unfortunately, there is one flaw in automatic detection. In countries where the same base timezone exists with and without daylight savings, it is not possible to distinguish the two timezones when daylight savings is currently not observed (This is because the GSM network only transmits UTC offset and daylight saving on/off). Three prominent affected regions of this problem are Arizona/USA, Saskatchewan/Canada and Queensland/Australia. Once daylight savings is observed, the system will autocorrect the device timezone, but previously entered events will be stored in the wrong timezone, and thus shifted by one hour.
We are currently working on an automatic detection for such misconfiguration.