Incorrect Timezone Handling in CalDAV Synchronization Causes Time Shifts #1626
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description:
When syncing events with CalDAV, there is a recurring issue where event times are shifted by one hour. This happens because the synchronization process incorrectly assumes that DTSTART and DTEND values are in UTC, even when they are actually in the local timezone (e.g., Europe/Vienna).
Steps to Reproduce:
Create an event in the calendar with a start time of 09:00 in Europe/Vienna. Synchronize the event with CalDAV.
Observe that the start time in the synchronized system is incorrectly shifted to 10:00. Root Cause Analysis:
The issue arises in the convert_caldav_event_to_array_event method:
This method assumes all DTSTART and DTEND values are in UTC. However, in many cases:
The DTSTART value contains a timezone identifier (e.g., TZID=Europe/Vienna). The value is implicitly in the local timezone, but this is not indicated in the data. As a result, the synchronization logic performs an unnecessary conversion from UTC to the local timezone, causing an unwanted shift.