code: def parse_isodate(datestr):
      
      m = isodate_rx.search(datestr)
      assert m, 'unrecognized date format: ' + datestr
      year, month, day = m.group('year', 'month', 'day')
      hour, minute, second, fraction = m.group('hour', 'minute', 'second', 'fraction')
      tz, tzhh, tzmm = m.group('tz', 'tzhh', 'tzmm')
      dt = datetime.datetime(int(year), int(month), int(day), int(hour))
      if fraction is None:
          fraction = 0
      else:
          fraction = float('0.' + fraction)
      if minute is None:
          dt = dt.replace(minute=int(60 * fraction))
      else:
          dt = dt.replace(minute=int(minute))
          if second is None:
              dt = dt.replace(second=int(60 * fraction))
          else:
              dt = dt.replace(second=int(second), microsecond=int(1000000 * fraction))
      if tz is not None:
          if tz[0] == 'Z':
              offset = 0
          else:
              offset = datetime.timedelta(minutes=int(tzmm or 0), hours=int(tzhh))
              if tz[0] == '-':
                  offset = -offset
          dt = dt.replace(tzinfo=UTCOffset(offset))
      return dt
docs: Parse a string that loosely fits ISO 8601 formatted date-time string