datetime in UTC -> datetime in local time.

def fromutc(self, dt):
        """datetime in UTC -> datetime in local time."""

        if not isinstance(dt, datetime):
            raise TypeError("fromutc() requires a datetime argument")
        if dt.tzinfo is not self:
            raise ValueError("dt.tzinfo is not self")
        dt = dt.replace(tzinfo=None)
        if dt > self.posix_after:
            dt = self.posix_rules.fromutc(dt.replace(tzinfo=self.posix_rules))
            return dt.replace(tzinfo=self)
        if dt < self.ut[1]:
            tti = self.ti[0]
            fold = 0
        else:
            idx = bisect.bisect_right(self.ut, dt)
            assert self.ut[idx - 1] <= dt
            assert idx == len(self.ut) or dt < self.ut[idx]
            tti_prev, tti = self.ti[idx - 2:idx]
            # Detect fold
            shift = tti_prev[0] - tti[0]
            fold = (shift > dt - self.ut[idx - 1])
        dt += tti[0]
        dt = dt.replace(tzinfo=self)
        if fold:
            return enfold(dt)
        else:
            return dt