code: def extractTimes(self, inp):
          def handleMatch(time):
              relative = False
              if not time:
                  return None
              elif time.group(1) == 'morning':
                  h = 8
                  m = 0
              elif time.group(1) == 'afternoon':
                  h = 12
                  m = 0
              elif time.group(1) == 'evening':
                  h = 19
                  m = 0
              elif time.group(4) and time.group(5):
                  h, m = 0, 0
                  converter = NumberService()
                  try:
                      diff = converter.parse(time.group(4))
                  except:
                      return None
                  if time.group(5) == 'hours':
                      h += diff
                  else:
                      m += diff
                  if time.group(6):
                      converter = NumberService()
                      try:
                          diff = converter.parse(time.group(7))
                      except:
                          return None
                      if time.group(8) == 'hours':
                          h += diff
                      else:
                          m += diff
                  relative = True
              else:
                  t = time.group(2)
                  h, m = int(t.split(':')[0]) % 12, int(t.split(':')[1])
                  try:
                      if time.group(3) == 'pm':
                          h += 12
                  except IndexError:
                      pass
              if relative:
                  return self.now + datetime.timedelta(hours=h, minutes=m)
              else:
                  return datetime.datetime(
                      self.now.year, self.now.month, self.now.day, h, m
                  )
          inp = self._preprocess(inp)
          return [handleMatch(time) for time in self._timeRegex.finditer(inp)]