Hi Timo,
I understand your concern regarding the ambiguous hour in autumn (fall back) and not wanting to change the database schema. However, this can be solved without touching the database at all.
Here is why a full database timezone implementation isn't necessary for these specific cases:
The autumn case (local state, no DB changes):
If a timer is actively running during the autumn transition, the app doesn't need to store a UTC offset in the main database. It can simply save a temporary flag (like isFirstOccurrence or a temporary UTC start time) in the local app cache/preferences just for that active session. Once the timer is stopped, the app calculates the correct duration and saves only the final duration to the database, just like it always does.
The spring case (unambiguous math):
As mentioned in my initial report, the spring transition (spring forward) has no ambiguous overlap. The hour from 02:00 to 02:59 simply does not exist. If an entry is logged on that day, applying a local UTC conversion strictly for the math (EndTime UTC - StartTime UTC) resolves the 1-hour error immediately.
The absolute minimum (user warning):
If implementing the logic above is still out of scope right now, the absolute minimum for a professional productivity tool should be a warning. If an entry overlaps with a DST transition day, the app should show a prompt (e.g., "Note: This entry falls on a time change date. Please verify the duration manually.").
Silently logging incorrect durations and falsifying tracked work hours is the worst possible outcome for a time-tracking app. I highly recommend at least implementing the spring fix and a warning for the autumn case to prevent silent data corruption for your users.
Thanks