toontown-just-works/toontown/parties/ToontownTimeZone.py
2024-07-07 18:08:39 -05:00

53 lines
1.4 KiB
Python

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)