<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def solar_midnight_utc(self, date, longitude):
 """Calculate solar midnight time in the UTC timezone. Note that this claculates the solar midgnight that is closest to 00:00:00 of the specified date i.e. it may return a time that is on the previous day. :param date: Date to calculate for. :type date: :class:`datetime.date` :param longitude: Longitude - Eastern longitudes should be positive :type longitude: float :return: The UTC date and time at which midnight occurs. :rtype: :class:`~datetime.datetime` """


        julianday = self._julianday(date)

        newt = self._jday_to_jcentury(julianday + 0.5 + -longitude / 360.0)

        eqtime = self._eq_of_time(newt)
        timeUTC = (-longitude * 4.0) - eqtime

        timeUTC = timeUTC / 60.0
        hour = int(timeUTC)
        minute = int((timeUTC - hour) * 60)
        second = int((((timeUTC - hour) * 60) - minute) * 60)

        if second > 59:
            second -= 60
            minute += 1
        elif second < 0:
            second += 60
            minute -= 1

        if minute > 59:
            minute -= 60
            hour += 1
        elif minute < 0:
            minute += 60
            hour -= 1

        if hour < 0:
            hour += 24
            date -= datetime.timedelta(days=1)

        midnight = datetime.datetime(
            date.year, date.month, date.day, hour, minute, second
        )
        midnight = pytz.UTC.localize(midnight)  # pylint: disable=E1120

        return midnight