Extract semantic date information from an input string.
        In effect, runs both parseDay and parseTime on the input
        string and merges the results to produce a comprehensive
        datetime object.

        Args:
            inp (str): Input string to be parsed.

        Returns:
            A list of datetime objects containing the extracted dates from the
            input snippet, or an empty list if not found.

def extractDates(self, inp):
        """Extract semantic date information from an input string.
        In effect, runs both parseDay and parseTime on the input
        string and merges the results to produce a comprehensive
        datetime object.

        Args:
            inp (str): Input string to be parsed.

        Returns:
            A list of datetime objects containing the extracted dates from the
            input snippet, or an empty list if not found.
        """
        def merge(param):
            day, time = param
            if not (day or time):
                return None

            if not day:
                return time
            if not time:
                return day

            return datetime.datetime(
                day.year, day.month, day.day, time.hour, time.minute
            )

        days = self.extractDays(inp)
        times = self.extractTimes(inp)
        return map(merge, zip_longest(days, times, fillvalue=None))