Repository navigation
Timezones are not processed correctly at import of ICS file #535
Description
Checklist
- I can reproduce the bug with the latest version given here.
- I made sure that there are no existing issues - open or closed - to which I could contribute my information.
- I made sure that there are no existing discussions - open or closed - to which I could contribute my information.
- I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed.
- I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise.
- This issue contains only one bug.
- I have read and understood the contribution guidelines.
Affected app version
1.2.0
Affected Android/Custom ROM version
Android 15 (Xiaomi 2.0.4.0.VNTEUXM)
Affected device model
Redmi13
How did you install the app?
F-Droid / IzzyOnDroid
Which calendar service or provider do you use, if any?
No response
Which sync adapter app do you use for calendar synchronization, if any?
No response
Steps to reproduce the bug
I missed a ms teams conference with my professor regarding my PhD because Calender does not honor time zones correctly.
To reproduce open the file msteamsinvite.ics (remove txt for acceptance) with calendar. Note the start time of the meeting is 11h and not 10h as it should be if you have central european summer time. Note the meeting invite uses israeli standard time ;-)
Neglect to detail on both sides caused the meeting to fail.
A user would expect calendar at least to produce a pop-up warning about different time zone in the ICS file and the time zone set for the android device.
The critical part in the ICS is here:
"
BEGIN:VTIMEZONE
TZID:Israel Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1FR;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
"
We have daylight saving in europe and israel and also we have israeli time zone vs european time zone.
This should be fixed to prevent people missing their important meetings.
Best would be to implement proper parsing of ICS VTIMEZONE and time zone handling using a proper library for time zones.
Expected behavior
The user imports the ICS file and the timezone is properly parsed and the date is correctly calculated including time and timezone so the meeting is scheduled at the right time regardless which time zone the sender and producer oi ICS uses and the time zone the user of calendar uses.
Actual behavior
The user imports the ICS file and the timezone is NOT properly parsed and the date is NOT correctly calculated including time and timezone so the meeting is scheduled at the WRONG time when the time zone of the sender and producer oi ICS is DIFFERENT from the time zone the user of calendar uses.
This leads to missed meetings!
Screenshots/Screen recordings
No response
Additional information
No response
Activity
savar commentedon Apr 23, 2025
another one.. timezone on the phone and in the ICS are the same, still it should have been starting 2025-04-22T12:30:00+0200 but it was 2025-04-22T14:30+0200 as if the 2 hours UTC offset was simply added.
kuflierl commentedon Apr 23, 2025
Same issue here on 1.2.0 FDroid on graphene os.
My train connection was shown as 2 hours later due to bad timezone interpretation. The time is interpreted as UTC as given but not corrected for the timezone.
englut commentedon Aug 20, 2025
I'm also experiencing this issue. Would be good to address timezones.
watermelonwolverine commentedon Oct 22, 2025
I experienced a similar bug on version 1.6.2.
I almost missed an important job interview because of this. Luckily one of the interviewers sent me an email asking me were I was.
This bug can cause some real damage.
kirkawolff commentedon Jan 9, 2026
My AI slopped this out. Take it for what it is.
Root cause
Outlook / Exchange emits Windows time zone IDs (e.g.
TZID:W. Europe Standard Time) instead of IANA/Olson IDs (Europe/Berlin, etc.).Fossify appears to not reliably resolve these TZIDs or apply the embedded
VTIMEZONE, so events are imported using the wrong offset (typically ±1 hour around DST), especially when the producer TZ ≠ device TZ.This is a producer reality, not a malformed ICS: RFC 5545 allows arbitrary TZID tokens, and Outlook always uses Windows TZIDs.
Proposed fix (importer-side)
Detect Windows TZIDs
TZIDdoes not contain/and matches known Windows IDs, treat it as a Windows TZID.Map Windows → IANA
windowsZones.xml).001mapping or device region as a heuristic.Always honor embedded VTIMEZONE
VTIMEZONEcomponent exists for the event’s TZID, apply it per RFC 5545.VTIMEZONEdefinition is present.(Secondary) Be tolerant of Outlook transport artifacts
Why this matters
Outlook/Exchange is the dominant enterprise ICS producer and is historically not going to change its TZID behavior.
Importer-side Windows→IANA mapping is how other ecosystems handle this (Java, ICU, CLDR consumers) and is the only realistic path to correct interop.
Suggested tests
VTIMEZONEiosonofabio commentedon Feb 8, 2026
Also having time zone issues, a couple meetings are rigjt time but wrong day (here in Australia meetings are often on the next day compared to EU and US).
Hazematman commentedon Mar 3, 2026
Another data point. This event has a time of 13:30-14:30 UTC but in fossify calendar shows as 9:30-10:30EST in the calendar (my time zone is EST), which if converted properly should be 8:30-9:30 EST.
BrunswickBTC commentedon Sep 4, 2026
Additional reproducible case: Microsoft Outlook/Teams invite
I found a current production example of the timezone-import bug described here. The invite was generated by Microsoft Exchange/Teams and imported into Fossify Calendar on a GrapheneOS Android phone whose device timezone is
America/Chicago(CDT).ICS input
The invitation contains an embedded
VTIMEZONEwith the Microsoft/Windows identifier:The event itself is:
Actual behavior
Fossify imported and displayed the event as 2:00 PM CDT.
Expected behavior
September 8 is daylight time in this zone, so the event is 2:00 PM EDT, which should display as 1:00 PM CDT on a device in
America/Chicago.Root cause indication
The current importer appears to ignore the embedded
VTIMEZONE.IcsImporter.getTimestamp()only changes from the device default when the TZID exactly matches a Joda/IANA timezone ID.Eastern Standard Timeis a Microsoft/Windows timezone ID, so it is not recognized and the importer falls back to the device timezone while interpreting the literal14:00.This is a concrete interoperability case with Outlook/Exchange, not a malformed ICS. The fix should either honor the embedded
VTIMEZONEor map Windows timezone IDs to IANA zones (for example through CLDR/Windows zone mappings), with tests covering DST and a device in a different timezone.The sender's Outlook calendar also independently showed the meeting at 2 PM Eastern, confirming the intended instant.
kirkawolff commentedon Sep 14, 2026
When will this be fixed? MS calendar ICS imported invites always default to the local timezone.
acq23 commentedon Oct 28, 2026
I've been in late to an intercontinental meeting because of this.
It blows my mind that a developer refuses to fix a bug on a feature that is essential for a calendar.
And this since the beginning of the fork because bugs related to ICS import and DST management are there since, at least, Feb 28, 2024.
Plus on #165 on Mar 14, 2025 a fix have been announced for the following release and nothing came into production.
On 2026 the following actions on the same bug report have been done:
naveensingh
added confirmed accepted and removed confirmed
on Jan 27
naveensingh
removed accepted
on Jul 14
Does anyone knows trustable fork of simple calendar that has not this problem or other calendar trustable apps? I need caldav integration at least via DAVx5 and Android 9 compatibility.
acq23 commentedon Oct 28, 2026
@naveensingh Etar calendar just works fine on this matter: go and look at its code.
vepain commentedon Oct 29, 2026
Bug also here.
In addition, when I export the ICS and import into a google calendar via thunderbird, both thunderbird and google calendar show me the events with a minus 1h shift, while the same re-imported events in Fossify Calendar are displayed at the correct time for the timezone...
I checked every timezone parameters both from the OS and from the applications (linux and android). Only Fossify calendar differs in behaviour.
It may help to know i am in timezone UTC + 1, so it can explain why the events received a minus 1h.
Android 10
Fossify calendar 1.12.0
openfnord commentedon Oct 29, 2026
They should fix it. Who cares for updated translations when essential features of a calendar go wrong!