aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>2007-03-26 16:26:20 +0000
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>2007-03-26 16:26:20 +0000
commita531f1ddfcd4707e75f3425faebbc277466691d5 (patch)
treeb704d8c8022d2961f16d358cea38762cc293e13c
parent86994c65bb90af606820742518a323c831e7ea50 (diff)
downloadenigma2-a531f1ddfcd4707e75f3425faebbc277466691d5.tar.gz
enigma2-a531f1ddfcd4707e75f3425faebbc277466691d5.zip
hopefully fix the daylight saving problem for repeated timers
-rw-r--r--timer.py30
1 files changed, 27 insertions, 3 deletions
diff --git a/timer.py b/timer.py
index 35116948..75519cf8 100644
--- a/timer.py
+++ b/timer.py
@@ -2,6 +2,8 @@ from bisect import insort
from time import strftime, time, localtime, gmtime, mktime
from calendar import timegm
from enigma import eTimer
+import calendar
+import datetime
class TimerEntry:
StateWaiting = 0
@@ -29,6 +31,29 @@ class TimerEntry:
def isRunning(self):
return self.state == self.StateRunning
+ def addOneDay(self, timedatestruct):
+ day = timedatestruct.tm_mday
+ month = timedatestruct.tm_mon
+ year = timedatestruct.tm_year
+
+ if calendar.isleap(year):
+ leap = 29
+ else:
+ leap = 28
+ monthdays = [0, 31, leap, 31, 30, 31, 30, 31, 31,30, 31,30, 31]
+ day += 1
+
+ # check for sane dates and correct if needed
+ if day > monthdays[month]:
+ day = 1
+ month += 1
+ if month > 12:
+ month = 1
+ year += 1
+
+ newdate = datetime.datetime(year, month, day, timedatestruct.tm_hour, timedatestruct.tm_min, timedatestruct.tm_sec)
+ return newdate.timetuple()
+
# update self.begin and self.end according to the self.repeated-flags
def processRepeated(self, findRunningEvent = True):
print "ProcessRepeated"
@@ -58,9 +83,8 @@ class TimerEntry:
while ((day[localbegin.tm_wday] != 0) or ((day[localbegin.tm_wday] == 0) and ((findRunningEvent and localend < localnow) or ((not findRunningEvent) and localbegin < localnow)))):
print "localbegin:", strftime("%c", localbegin)
print "localend:", strftime("%c", localend)
- #add one day to the struct_time, we have to convert using gmt functions, because the daylight saving flag might change after we add our 86400 seconds
- localbegin = gmtime(timegm(localbegin) + 86400)
- localend = gmtime(timegm(localend) + 86400)
+ localbegin = self.addOneDay(localbegin)
+ localend = self.addOneDay(localend)
#we now have a struct_time representation of begin and end in localtime, but we have to calculate back to (gmt) seconds since epoch
self.begin = int(mktime(localbegin))