<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def utc(self, year, month=1, day=1, hour=0, minute=0, second=0.0):
 """Build a `Time` from a UTC calendar date. You can either specify the date as separate components, or provide a time zone aware Python datetime. The following two calls are equivalent (the ``utc`` time zone object can be imported from the ``skyfield.api`` module, or from ``pytz`` if you have it):
: ts.utc(2014, 1, 18, 1, 35, 37.5) ts.utc(datetime(2014, 1, 18, 1, 35, 37, 500000, tzinfo=utc)) Note that only by passing the components separately can you specify a leap second, because a Python datetime will not allow the value 60 in its seconds field. """

        if isinstance(year, datetime):
            dt = year
            tai = _utc_datetime_to_tai(self.leap_dates, self.leap_offsets, dt)
        elif isinstance(year, date):
            d = year
            tai = _utc_date_to_tai(self.leap_dates, self.leap_offsets, d)
        elif hasattr(year, '__len__') and isinstance(year[0], datetime):
            # TODO: clean this up and better document the possibilities.
            list_of_datetimes = year
            tai = array([
                _utc_datetime_to_tai(self.leap_dates, self.leap_offsets, dt)
                for dt in list_of_datetimes])
        else:
            tai = _utc_to_tai(self.leap_dates, self.leap_offsets,
                              _to_array(year), _to_array(month),
                              _to_array(day), _to_array(hour),
                              _to_array(minute), _to_array(second))
        t = Time(self, tai + tt_minus_tai)
        t.tai = tai
        return t