docs: def _make_result(cls, values, now, timezone):
          """
          Makes a date or datetime or time object from a map of component values
          :param values: the component values
          :param now: the current now
          :param timezone: the current timezone
          :return: the date, datetime, time or none if values are invalid
          """
          date = None
          time = None
  
          if Component.MONTH in values:
              year = cls._year_from_2digits(values.get(Component.YEAR, now.year), now.year)
              month = values[Component.MONTH]
              day = values.get(Component.DAY, 1)
              try:
                  date = datetime.date(year, month, day)
              except ValueError:
                  return None  # not a valid date
  
          if (Component.HOUR in values and Component.MINUTE in values) or Component.HOUR_AND_MINUTE in values:
              if Component.HOUR_AND_MINUTE in values:
                  combined = values[Component.HOUR_AND_MINUTE]
                  hour = combined // 100
                  minute = combined - (hour * 100)
                  second = 0
                  nano = 0
              else:
                  hour = values[Component.HOUR]
                  minute = values[Component.MINUTE]
                  second = values.get(Component.SECOND, 0)
                  nano = values.get(Component.NANO, 0)
  
                  if hour < 12 and values.get(Component.AM_PM) == cls.PM:
                      hour += 12
                  elif hour == 12 and values.get(Component.AM_PM) == cls.AM:
                      hour -= 12
  
              try:
                  time = datetime.time(hour, minute, second, microsecond=nano // 1000)
              except ValueError:
                  return None  # not a valid time
  
          if Component.OFFSET in values:
              timezone = pytz.FixedOffset(values[Component.OFFSET] // 60)
  
          if date is not None and time is not None:
              return timezone.localize(datetime.datetime.combine(date, time))
          elif date is not None:
              return date
          elif time is not None:
              return time
          else:
              return None