def astimezone(tz):
    """Return a datetime object with new tzinfo member tz, adjusting the
        date and time members so the result is the same UTC time as self, but
        in tz's local time.

        tz must be an instance of a tzinfo subclass, and its utcoffset() and
        dst() methods must not return None. self must be aware (self.tzinfo
        must not be None, and self.utcoffset() must not return None).

        If self.tzinfo is tz, self.astimezone(tz) is equal to self: no
        adjustment of date or time members is performed. Else the result is
        local time in time zone tz, representing the same UTC time as self:
            after astz = dt.astimezone(tz), astz - astz.utcoffset()
        will usually have the same date and time members as dt - dt.utcoffset().
        The discussion of class tzinfo explains the cases at Daylight Saving
        Time transition boundaries where this cannot be achieved (an issue only
        if tz models both standard and daylight time).

        If you merely want to attach a time zone object tz to a datetime dt
        without adjustment of date and time members, use dt.replace(tzinfo=tz).
        If you merely want to remove the time zone object from an aware
        datetime dt without conversion of date and time members, use
        dt.replace(tzinfo=None).

        Note that the default tzinfo.fromutc() method can be overridden in a
        tzinfo subclass to effect the result returned by astimezone().
        """
