fork download
  1. import time
  2. from datetime import tzinfo, timedelta, datetime
  3.  
  4. ZERO_HR = timedelta(hours=0)
  5. ONE_HR = timedelta(hours=1)
  6.  
  7. class UTCTimeZone(tzinfo):
  8. def __init__(self, minutes=0, dst=False, tzname=""):
  9. self.__minutes = minutes
  10. self.__dst = dst
  11. self.__tzname = tzname
  12.  
  13. def utcoffset(self, dt):
  14. if self.__dst:
  15. return timedelta(minutes=self.__minutes) + self.dst(dt)
  16. return timedelta(minutes=self.__minutes)
  17.  
  18. def tzname(self, dt):
  19. if self.__tzname:
  20. return self.__tzname
  21. dst_str = " DST" if self.__dst else ""
  22. if self.__minutes == 0:
  23. return "UTC" + dst_str
  24. mm = self.__minutes
  25. sign = "+"
  26. if mm < 0:
  27. mm *= -1
  28. sign = "-"
  29. hh = mm / 60
  30. mm %= 60
  31. return "UTC %(sign)s%(hours)02d%(minutes)02d%(dst)s" % {"sign":sign, "hours":hh,
  32. "minutes":mm, "dst":dst_str}
  33.  
  34. def _FirstSunday(self, dt):
  35. """First Sunday on or after dt."""
  36. return dt + timedelta(days=(6-dt.weekday()))
  37.  
  38. def dst(self, dt):
  39. if self.__dst:
  40. # 2am on the 2nd Sunday in Mar
  41. dst_start = self._FirstSunday(datetime(dt.year, 3, 8, 2))
  42. # 1am on the 1st Sunday in Nov
  43. dst_end = self._FirstSunday(datetime(dt.year, 11, 1, 1))
  44. return ONE_HR if dst_start <= dt.replace(tzinfo=None) < dst_end else ZERO_HR
  45. return ZERO_HR
Success #stdin #stdout 0.01s 7816KB
stdin
Standard input is empty
stdout
Standard output is empty