diff --git a/Services/EpgService.cs b/Services/EpgService.cs
index 0c844cc..c109841 100644
--- a/Services/EpgService.cs
+++ b/Services/EpgService.cs
@@ -172,14 +172,7 @@ public class EpgService
_eventsByChannel = events;
}
- ///
- /// XMLTV-Zeit "20260510120000 +0200" → lokale DateTime.
- ///
- /// WICHTIG: epg.pw markiert alle Zeiten mit "+0000", liefert sie aber faktisch
- /// schon in lokaler Zeit (MEZ/MESZ). Das ist ein Bug im Feed. Wir behandeln
- /// daher "+0000" speziell: Zeit direkt als lokal interpretieren, nicht konvertieren.
- /// Echte Offsets (z.B. "+0200") werden korrekt umgerechnet.
- ///
+ /// XMLTV-Zeit "20260510120000 +0200" → DateTime (lokale Zeit)
private static DateTime ParseXmltvTime(string s)
{
if (string.IsNullOrWhiteSpace(s)) return DateTime.MinValue;
@@ -188,24 +181,24 @@ public class EpgService
var parts = s.Trim().Split(' ', 2);
var dt = DateTime.ParseExact(parts[0], "yyyyMMddHHmmss",
System.Globalization.CultureInfo.InvariantCulture);
+ // dt.Kind = Unspecified hier
if (parts.Length == 2 && parts[1].Length == 5)
{
- // Sonderfall: epg.pw liefert IMMER "+0000", obwohl die Zeiten in Wahrheit
- // schon lokale Sendezeiten sind (Tagesschau 20:00 steht als 200000 +0000,
- // nicht 180000 +0000). Daher "+0000" als "bereits lokal" behandeln.
- if (parts[1] == "+0000" || parts[1] == "-0000")
- return dt;
-
- // Echter Offset → konvertieren
+ // Offset parsen: "+0200" oder "+0000"
var sign = parts[1][0] == '-' ? -1 : 1;
var hh = int.Parse(parts[1].Substring(1, 2));
var mm = int.Parse(parts[1].Substring(3, 2));
var offset = TimeSpan.FromMinutes(sign * (hh * 60 + mm));
+
+ // dt ist die Uhrzeit im angegebenen Offset (nicht UTC)
+ // DateTimeOffset(Unspecified, offset) interpretiert dt als "diese Zeit in dieser Zone"
+ // .ToLocalTime() konvertiert korrekt in die Systemzeitzone
return new DateTimeOffset(dt, offset).ToLocalTime().DateTime;
}
- return dt;
+ // Kein Offset → UTC annehmen (epg.pw liefert immer +0000, aber sicherheitshalber)
+ return new DateTimeOffset(dt, TimeSpan.Zero).ToLocalTime().DateTime;
}
catch { return DateTime.MinValue; }
}