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;
