| 6203 | # Reimplementing simplified US timezones to respect the "fold" flag: |
| 6204 | |
| 6205 | class USTimeZone2(tzinfo2): |
| 6206 | |
| 6207 | def __init__(self, hours, reprname, stdname, dstname): |
| 6208 | self.stdoffset = timedelta(hours=hours) |
| 6209 | self.reprname = reprname |
| 6210 | self.stdname = stdname |
| 6211 | self.dstname = dstname |
| 6212 | |
| 6213 | def __repr__(self): |
| 6214 | return self.reprname |
| 6215 | |
| 6216 | def tzname(self, dt): |
| 6217 | if self.dst(dt): |
| 6218 | return self.dstname |
| 6219 | else: |
| 6220 | return self.stdname |
| 6221 | |
| 6222 | def utcoffset(self, dt): |
| 6223 | return self.stdoffset + self.dst(dt) |
| 6224 | |
| 6225 | def dst(self, dt): |
| 6226 | if dt is None or dt.tzinfo is None: |
| 6227 | # An exception instead may be sensible here, in one or more of |
| 6228 | # the cases. |
| 6229 | return ZERO |
| 6230 | assert dt.tzinfo is self |
| 6231 | |
| 6232 | # Find first Sunday in April. |
| 6233 | start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) |
| 6234 | assert start.weekday() == 6 and start.month == 4 and start.day <= 7 |
| 6235 | |
| 6236 | # Find last Sunday in October. |
| 6237 | end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) |
| 6238 | assert end.weekday() == 6 and end.month == 10 and end.day >= 25 |
| 6239 | |
| 6240 | # Can't compare naive to aware objects, so strip the timezone from |
| 6241 | # dt first. |
| 6242 | dt = dt.replace(tzinfo=None) |
| 6243 | if start + HOUR <= dt < end: |
| 6244 | # DST is in effect. |
| 6245 | return HOUR |
| 6246 | elif end <= dt < end + HOUR: |
| 6247 | # Fold (an ambiguous hour): use dt.fold to disambiguate. |
| 6248 | return ZERO if dt.fold else HOUR |
| 6249 | elif start <= dt < start + HOUR: |
| 6250 | # Gap (a non-existent hour): reverse the fold rule. |
| 6251 | return HOUR if dt.fold else ZERO |
| 6252 | else: |
| 6253 | # DST is off. |
| 6254 | return ZERO |
| 6255 | |
| 6256 | Eastern2 = USTimeZone2(-5, "Eastern2", "EST", "EDT") |
| 6257 | Central2 = USTimeZone2(-6, "Central2", "CST", "CDT") |
no outgoing calls
no test coverage detected
searching dependent graphs…