Source setup

How to Configure an IPTV EPG and Fix Time Offsets

Fix a wrong IPTV guide: diagnose XMLTV timezone data vs. device clock vs. app offset, then use IPTV Expert's EPG and Time shift screen to correct it.

Electronic program guide grid showing scheduled TV programs and times
IPTV Expert 8 min read

A wrong EPG time is almost never a broken guide. It's a timestamp read against the wrong reference. The program grid shows a show starting two hours before or after it actually airs. The data itself usually isn't corrupted. It's just being interpreted against the wrong clock somewhere between the source and your screen.

Generic troubleshooting guides tend to describe one universal "EPG Time Offset slider," as if every app had the same control. It doesn't. There's a warning that gets skipped just as often, too: if your source's guide data is already correct and you apply a manual correction on top, you can turn a working guide into a wrong one. This guide covers how to tell where the fault actually is. Then it covers the exact screen IPTV Expert gives you to fix it.

Key takeaways

  • XMLTV files carry their own timezone per programme entry. If none is given, UTC is assumed — so a "wrong time" guide is often a source-side timezone problem, not an app bug.
  • IPTV Expert's EPG settings screen has four controls per source: Enable, Refresh now, Refresh frequency, and Time shift.
  • Time shift is a whole-hour-only correction, from -12h to +12h, applied when the app reads the cached guide. It does not rewrite the downloaded XMLTV file, and it can't correct a sub-hour (for example 30-minute) mismatch.

What an EPG time offset actually is

An EPG (electronic program guide) is built from a separate data feed layered on top of your channel list. For most IPTV setups that feed is XMLTV. It's an XML file listing programmes, each with a start and stop attribute stamped in a specific format.

The XMLTV format's own reference documentation states the rule plainly. Dates and times "follow the same format, loosely based on ISO 8601," written as YYYYMMDDhhmmss. And "you can also append a timezone to the end; if no explicit timezone is given, UTC is assumed" (XMLTV DTD, xmltv.dtd). In other words, a well-formed programme entry is supposed to declare its own offset from UTC. When it does, any compliant reader can convert it to local time correctly. When it doesn't, or declares the wrong one, every downstream guide inherits that error.

Here's what that looks like in practice, sanitized down to the two lines that matter:

<!-- Wrong: no explicit timezone appended.
     Under the DTD rule above, this is read as UTC even if the
     broadcaster meant local time in a UTC+2 region. -->
<programme start="20260818200000" stop="20260818210000" channel="example.channel">
  <title>Evening News</title>
</programme>

<!-- Correct: explicit UTC offset appended, per the DTD's own
     example format ("19880523083000 +0300"). -->
<programme start="20260818200000 +0200" stop="20260818210000 +0200" channel="example.channel">
  <title>Evening News</title>
</programme>

Both entries describe the same nominal clock time, 20:00. Only the second one tells a reader unambiguously which 20:00 that is. Say your source publishes entries shaped like the first example, and your actual broadcast region isn't UTC. The whole guide will show times shifted by exactly that difference — commonly by a small number of whole hours, matching typical UTC-offset regions.

Diagnose before you fix it

Answer-first: check the source's own XMLTV data first, then your device clock and timezone, then the app's own offset control last. Fixing the wrong layer stacks a new error on top of the real one instead of removing it.

  1. Check whether the offset is consistent across every channel and every day. A source-side timezone problem — missing or wrong offset in the XMLTV feed, as shown above — usually shifts every programme by the same fixed amount, all the time. If it's consistent, the fix belongs at the source, or in the app's Time shift control below. It doesn't belong in your device settings.
  2. Check your device's date, time and timezone. If the clock or timezone is wrong at the OS level, everything the app displays as "now" is measured from a false reference point. That throws off which programme reads as "currently airing," even if the XMLTV data itself is fine.
  3. Only then look at the app's own EPG offset control. If the first two checks are clean and the guide is still off by a fixed number of hours, a per-source Time shift setting is the right tool. It's covered next.

Skipping straight to step 3 is the most common way to make things worse. Applying a manual shift on top of a source that already carries the correct offset just adds the two corrections together in the wrong direction.

Wall clock used to check the correct local time before comparing it against a TV guide

Configure the EPG source in IPTV Expert

Answer-first: EPG settings live on one screen per source, with four controls in order: Enable, Refresh now, Refresh frequency, and Time shift.

  1. Open EPG settings for your current source. It's reached from the app menu. Every control on this screen applies to the source you currently have selected. If you use more than one source, each gets its own EPG settings independently.
  2. Enable. A switch that turns EPG fetching on or off for this source.
  3. Refresh now. Triggers an immediate download of the guide data. This row also shows the last update date and how many programmes are currently cached, so you can confirm a refresh actually pulled in data instead of silently failing.
  4. Refresh frequency. How often the app checks whether cached guide data is old enough to re-download automatically (see the table below).
  5. Time shift. Shows the current per-source offset, for example -2h or +3h. Tapping it opens the correction screen covered in the next section.

For M3U and Xtream Codes sources, the same screen also shows a Custom URL field. It's pre-filled with a placeholder showing the URL the app would use automatically. IPTV Expert resolves that automatic URL in a fixed order. First, a custom URL you've entered yourself. Then, for Xtream Codes sources, a URL built automatically from your account in the form {server}/xmltv.php?username={username}&password={password}. Then a playlist-supplied EPG URL, if your M3U itself specifies one. If none of those exist, there's no EPG for that source. Entering your own value and saving enables EPG for that source and triggers an immediate refresh. Clearing the field reverts to the automatic URL. Stalker Portal sources don't show this field at all — they use a separate, dedicated EPG download path instead.

If a refresh fails, IPTV Expert shows one message: "Error while refreshing the EPG." That single message covers a bad URL, a network problem, and a malformed XMLTV file alike. It doesn't diagnose which one occurred. If a refresh fails repeatedly, re-checking the URL itself — including whether it still needs the credentials that built it — is the fastest first step. If you haven't added an Xtream Codes, M3U or Stalker Portal source yet, start there instead: How to Set Up Xtream Codes in IPTV Expert, How to Add an M3U Playlist to IPTV Expert and How to Configure a Stalker Portal in IPTV Expert cover those flows. The EPG URL resolution described here depends on that source already existing.

Smartphone settings menu representing where device time zone and app EPG options are configured

Fix a time offset with Time shift

Answer-first: Time shift is a per-source correction applied in whole-hour steps, from -12h to +12h, when the app reads the cached guide against the clock. It does not rewrite the downloaded XMLTV file.

  1. From the EPG settings screen, tap Time shift.
  2. Pick an offset from the list, shown as -12h through +12h in 1-hour increments.
  3. Confirm your selection. The app returns you to the EPG settings screen with the new value displayed.

Two things are worth knowing about how this actually works before you pick a number. First, the correction is applied per source, not globally. If you use more than one source, each can carry its own Time shift value — useful if one provider's feed already includes a correct offset and another's doesn't. Second, the shift only changes what the app treats as "now" when matching cached programmes to the clock. The underlying XMLTV file on disk is untouched.

That second point sets a hard limit on what this control can fix. The available steps are whole hours only. A source whose guide is off by a sub-hour amount — 30 minutes is the most common example — cannot be fully corrected by Time shift alone. In that case the fix has to happen at the source, by asking your provider about their feed's declared timezone, rather than in the app.

If your guide looks right for one source but wrong for another, that's expected. It means the two sources' underlying XMLTV data disagree on their own declared offset, and each needs its own Time shift value rather than one shared setting.

Remote control pointed at a television displaying a program guide in a living room

Set the refresh frequency

Guide data goes stale even when the time offset is correct, since broadcast schedules change. IPTV Expert's automatic refresh frequency controls how often it checks whether the cached guide is old enough to redownload:

Frequency Behavior
Disabled No automatic refresh; only manual "Refresh now" updates the guide
1 hour Checks hourly
4 hours Checks every 4 hours
12 hours Checks twice a day
24 hours Checks once a day
48 hours Checks every 2 days
72 hours Checks every 3 days
7 days Checks weekly

The app compares the time since your last successful refresh against this setting each time you switch to that source. It only triggers a new download once that interval has passed. A shorter frequency keeps schedule changes current sooner, at the cost of more frequent downloads.

What this can't fix

A few limitations are worth stating plainly rather than working around:

  • No sub-hour offset control. Time shift moves in whole-hour steps only. A 30-minute or other partial-hour mismatch needs a source-side fix, not an app setting.
  • No timezone-name picker. There's no list of named timezones, like a city or region, to choose from. It's only a numeric hour offset relative to your source's current guide.
  • Generic refresh-failure messaging. A failed EPG refresh shows one message regardless of cause. A bad URL, a network drop, and a malformed source file all look the same from the app's side.
  • Channel matching depends on the source. Cached guide data is matched to your channels by the channel identifier the XMLTV feed and your playlist or account both use. If a source's XMLTV feed uses different channel identifiers than your playlist, programme data won't line up with the right channel. That's a source-data alignment issue, not something Time shift addresses.

Which download should you use?

EPG settings work the same way across every platform IPTV Expert ships on, so there's no platform-specific step to call out here. If you already have the app installed, the settings above apply directly. If you're installing it for the first time, the full IPTV Expert download chooser covers every supported device. Once installed, M3U vs Xtream Codes: Which IPTV Login Format Should You Use? is a useful next read if you haven't decided which source format to add yet.

IPTV Expert

Watch on your screen

Download IPTV Expert for your preferred platform.

Download

IPTV Expert does not provide, host or sell channels, playlists or subscriptions.