From 1ad2d35e58f07b1d9dd15263dad3d18a78dda67d Mon Sep 17 00:00:00 2001 From: administrator Date: Mon, 11 May 2026 01:20:28 +0200 Subject: [PATCH] EPG Zeitzone-Fix + --rtsp-tcp --- MainWindow.xaml.cs | 4 +++- Services/EpgService.cs | 17 +++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index f7ccce1..01f000f 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -115,7 +115,9 @@ public partial class MainWindow : Window "--network-caching=1000", "--no-video-title-show", "--no-osd", - "--no-snapshot-preview" + "--no-snapshot-preview", + "--rtsp-tcp" // RTP over TCP: stabilere Sessions, vermeidet UDP-Routing-Kollisionen + // wenn mehrere Instanzen parallel auf die gleiche FritzBox zugreifen ); _player = new MediaPlayer(_libVLC); VideoView.MediaPlayer = _player; diff --git a/Services/EpgService.cs b/Services/EpgService.cs index 8c93a85..945a99b 100644 --- a/Services/EpgService.cs +++ b/Services/EpgService.cs @@ -162,22 +162,27 @@ public class EpgService if (string.IsNullOrWhiteSpace(s)) return DateTime.MinValue; try { - // Format: "yyyyMMddHHmmss +0200" oder ohne Offset 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) { + // 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 offsetMin = sign * (hh * 60 + mm); - // dt war als UTC+offset interpretiert, nach lokaler Zeit konvertieren - var asUtc = new DateTimeOffset(dt, TimeSpan.FromMinutes(offsetMin)); - return asUtc.LocalDateTime; + 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; } }