Fixing timezone issue with caldav.

This commit is contained in:
Burak Kaan Köse
2026-02-19 02:09:36 +01:00
parent 564cb0b16f
commit 317113a1b3
4 changed files with 199 additions and 11 deletions
+22 -2
View File
@@ -1768,8 +1768,11 @@ public class ImapSynchronizer : WinoSynchronizer<ImapRequest, ImapMessageCreatio
}
else
{
lines.Add($"DTSTART:{item.StartDate.ToUniversalTime():yyyyMMdd'T'HHmmss'Z'}");
lines.Add($"DTEND:{item.EndDate.ToUniversalTime():yyyyMMdd'T'HHmmss'Z'}");
var startUtc = ConvertEventTimeToUtc(item.StartDate, item.StartTimeZone);
var endUtc = ConvertEventTimeToUtc(item.EndDate, item.EndTimeZone ?? item.StartTimeZone);
lines.Add($"DTSTART:{startUtc:yyyyMMdd'T'HHmmss'Z'}");
lines.Add($"DTEND:{endUtc:yyyyMMdd'T'HHmmss'Z'}");
}
if (!string.IsNullOrWhiteSpace(item.Title))
@@ -1827,6 +1830,23 @@ public class ImapSynchronizer : WinoSynchronizer<ImapRequest, ImapMessageCreatio
return string.Join(Environment.NewLine, lines);
}
private static DateTime ConvertEventTimeToUtc(DateTime eventDateTime, string eventTimeZoneId)
{
if (string.IsNullOrWhiteSpace(eventTimeZoneId))
return eventDateTime.ToUniversalTime();
try
{
var eventTimeZone = TimeZoneInfo.FindSystemTimeZoneById(eventTimeZoneId);
var unspecifiedDateTime = DateTime.SpecifyKind(eventDateTime, DateTimeKind.Unspecified);
return TimeZoneInfo.ConvertTimeToUtc(unspecifiedDateTime, eventTimeZone);
}
catch
{
return eventDateTime.ToUniversalTime();
}
}
private static string EscapeIcs(string value)
{
if (string.IsNullOrEmpty(value))