import time
from datetime import tzinfo, timedelta, datetime

ZERO_HR = timedelta(hours=0)
ONE_HR = timedelta(hours=1)

class UTCTimeZone(tzinfo):
    def __init__(self, minutes=0, dst=False, tzname=""):
        self.__minutes = minutes
        self.__dst = dst
        self.__tzname = tzname

    def utcoffset(self, dt):
        if self.__dst:
            return timedelta(minutes=self.__minutes) + self.dst(dt)
        return timedelta(minutes=self.__minutes)

    def tzname(self, dt):
        if self.__tzname:
            return self.__tzname
        dst_str = " DST" if self.__dst else ""
        if self.__minutes == 0:
            return "UTC" + dst_str
        mm = self.__minutes
        sign = "+"
        if mm < 0:
            mm *= -1
            sign = "-"
        hh = mm / 60
        mm %= 60
        return "UTC %(sign)s%(hours)02d%(minutes)02d%(dst)s" % {"sign":sign, "hours":hh,
                                                                "minutes":mm, "dst":dst_str}

    def _FirstSunday(self, dt):
        """First Sunday on or after dt."""
        return dt + timedelta(days=(6-dt.weekday()))

    def dst(self, dt):
        if self.__dst:
            # 2am on the 2nd Sunday in Mar
            dst_start = self._FirstSunday(datetime(dt.year, 3, 8, 2))
            # 1am on the 1st Sunday in Nov
            dst_end = self._FirstSunday(datetime(dt.year, 11, 1, 1))
            return ONE_HR if dst_start <= dt.replace(tzinfo=None) < dst_end else ZERO_HR
        return ZERO_HR