diff --git a/mythtv/libs/libmyth/util.cpp b/mythtv/libs/libmyth/util.cpp
index c5358b0..84fb8eb 100644
--- a/mythtv/libs/libmyth/util.cpp
+++ b/mythtv/libs/libmyth/util.cpp
@@ -84,12 +84,18 @@ QDateTime myth_dt_from_string(const QString &dtstr)
     return QDateTime::fromString(dtstr, Qt::ISODate);
 }
 
+// Note: this function calculates the offset from UTC "right now". That offset
+// may not be valid a moment later, since daylight savings time might start or
+// end during that moment. Thus it's not valid to use this in calculations of
+// future events, like program guide data
 int calc_utc_offset(void)
 {
+
     QDateTime loc = QDateTime::currentDateTime();
-    QDateTime utc = QDateTime::currentDateTime().toUTC();
+    QDateTime utc = loc; // make an exact copy so elapsed time doesn't factor in
+    utc.setTimeSpec(Qt::UTC); // keeping same clock time, change only the time zone
 
-    int utc_offset = MythSecsTo(utc, loc);
+    int utc_offset = MythSecsTo(loc, utc);
 
     // clamp to nearest minute if within 10 seconds
     int off = utc_offset % 60;
@@ -529,8 +535,7 @@ bool checkTimeZone(const QStringList &master_settings)
  */
 int MythSecsTo(const QDateTime &from, const QDateTime &to)
 {
-   return (from.time().secsTo(to.time()) +
-           from.date().daysTo(to.date()) * 60 * 60 * 24);
+   return (from.secsTo(to));
 }
 
 /** \fn MythUTCToLocal(const QDateTime&)
@@ -538,7 +543,7 @@ int MythSecsTo(const QDateTime &from, const QDateTime &to)
  */
 QDateTime MythUTCToLocal(const QDateTime &utc)
 {
-    QDateTime local = QDateTime(QDate(1970, 1, 1));
+    QDateTime local = QDateTime(QDate(1970, 1, 1),QTime(0,0,0),Qt::UTC);
 
     int timesecs = MythSecsTo(local, utc);
     QDateTime localdt;
diff --git a/mythtv/libs/libmythtv/eithelper.cpp b/mythtv/libs/libmythtv/eithelper.cpp
index b3a9974..d672d7d 100644
--- a/mythtv/libs/libmythtv/eithelper.cpp
+++ b/mythtv/libs/libmythtv/eithelper.cpp
@@ -620,7 +620,7 @@ void EITHelper::CompleteEvent(uint atsc_major, uint atsc_minor,
         return;
 
     QDateTime starttime;
-    time_t off = secs_Between_1Jan1970_6Jan1980 + gps_offset + utc_offset;
+    time_t off = secs_Between_1Jan1970_6Jan1980 + gps_offset;
     time_t tmp = event.start_time + off;
     tm result;
 
@@ -630,11 +630,13 @@ void EITHelper::CompleteEvent(uint atsc_major, uint atsc_minor,
                                 result.tm_mon + 1,
                                 result.tm_mday));
         starttime.setTime(QTime(result.tm_hour, result.tm_min, result.tm_sec));
+        starttime.setTimeSpec(Qt::UTC);
     }
     else
     {
-        starttime.setTime_t(tmp - utc_offset);
+        starttime.setTime_t(tmp);
     }
+    starttime = MythUTCToLocal(starttime);
 
     // fix starttime only if the duration is a multiple of a minute
     if (!(event.length % 60))
