from datetime import datetime, timedelta, tzinfo # In the U.S., DST starts at 2AM (standard time) on the first Sunday in April: DST_START = datetime(1, 4, 1, 2) # ...and it ends at 2AM (DST time; 1AM standard time) on the last Sunday in # October, which is the first Sunday on or after October 25th: DST_END = datetime(1, 10, 25, 1) def forwardToSunday(dt): daysLeft = 6 - dt.weekday() if daysLeft: dt += timedelta(daysLeft) return dt class UTC(tzinfo): def tzname(self, dt): return 'UTC' def utcoffset(self, dt): return timedelta(0) def dst(self, dt): return timedelta(0) class ToontownTimeZone(tzinfo): def __init__(self): timeZoneInfo = config.GetString('server-timezone', 'EST/EDT/-5') self.stdName, self.dstName, self.stdOffset = timeZoneInfo.split('/') self.stdOffset = int(self.stdOffset) def tzname(self, dt): if self.dst(dt): return self.dstName else: return self.stdName def utcoffset(self, dt): return timedelta(hours=self.stdOffset) + self.dst(dt) def dst(self, dt): # Find the first Sunday in April, and the last in October: start = forwardToSunday(DST_START.replace(year=dt.year)) end = forwardToSunday(DST_END.replace(year=dt.year)) if start <= dt.replace(tzinfo=None) < end: return timedelta(hours=1) else: return timedelta(0)