def make_datetime(dt, date_parser=parse_date):
    """Coerce a datetime or string into datetime.datetime object

    Arguments:
      dt (str or datetime.datetime or atetime.time or numpy.Timestamp): time or date
        to be coerced into a `datetime.date` object

    Returns:
      datetime.time: Time of day portion of a `datetime` string or object

    >>> make_date('')
    datetime.date(1970, 1, 1)
    >>> make_date(None)
    datetime.date(1970, 1, 1)
    >>> make_date("11:59 PM") == datetime.date.today()
    True
    >>> make_date(datetime.datetime(1999, 12, 31, 23, 59, 59))
    datetime.date(1999, 12, 31)
    >>> make_datetime(['1970-10-31', '1970-12-25'])  # doctest: +NORMALIZE_WHITESPACE
    [datetime.datetime(1970, 10, 31, 0, 0), datetime.datetime(1970, 12, 25, 0, 0)]
    """
    if (isinstance(dt, (datetime.datetime, datetime.date, datetime.time, pd.Timestamp, np.datetime64)) or
            dt in (float('nan'), float('inf'), float('-inf'), None, '')):
        return dt
    if isinstance(dt, (float, int)):
        return datetime_from_ordinal_float(dt)
    if isinstance(dt, datetime.date):
        return datetime.datetime(dt.year, dt.month, dt.day)
    if isinstance(dt, datetime.time):
        return datetime.datetime(1, 1, 1, dt.hour, dt.minute, dt.second, dt.microsecond)
    if not dt:
        return datetime.datetime(1970, 1, 1)
    if isinstance(dt, basestring):
        try:
            return date_parser(dt)
        except ValueError:
            print('Unable to make_datetime({})'.format(dt))
            raise
    try:
        return datetime.datetime(*dt.timetuple()[:7])
    except AttributeError:
        try:
            dt = list(dt)
            if 0 < len(dt) < 7:
                try:
                    return datetime.datetime(*dt[:7])
                except (TypeError, IndexError, ValueError):
                    pass
        except (TypeError, IndexError, ValueError, AttributeError):
            # dt is not iterable
            return dt

    return [make_datetime(val, date_parser=date_parser) for val in dt]
def make_datetime ( dt , date_parser = parse_date ) : if ( isinstance ( dt , ( datetime . datetime , datetime . date , datetime . time , pd . Timestamp , np . datetime64 ) ) or dt in ( float ( 'nan' ) , float ( 'inf' ) , float ( '-inf' ) , None , '' ) ) : return dt if isinstance ( dt , ( float , int ) ) : return datetime_from_ordinal_float ( dt ) if isinstance ( dt , datetime . date ) : return datetime . datetime ( dt . year , dt . month , dt . day ) if isinstance ( dt , datetime . time ) : return datetime . datetime ( 1 , 1 , 1 , dt . hour , dt . minute , dt . second , dt . microsecond ) if not dt : return datetime . datetime ( 1970 , 1 , 1 ) if isinstance ( dt , basestring ) : try : return date_parser ( dt ) except ValueError : print ( 'Unable to make_datetime({})' . format ( dt ) ) raise try : return datetime . datetime ( * dt . timetuple ( ) [ : 7 ] ) except AttributeError : try : dt = list ( dt ) if 0 < len ( dt ) < 7 : try : return datetime . datetime ( * dt [ : 7 ] ) except ( TypeError , IndexError , ValueError ) : pass except ( TypeError , IndexError , ValueError , AttributeError ) : return dt return [ make_datetime ( val , date_parser = date_parser ) for val in dt ]
Coerce a datetime or string into datetime.datetime object

    Arguments:
      dt (str or datetime.datetime or atetime.time or numpy.Timestamp): time or date
        to be coerced into a `datetime.date` object

    Returns:
      datetime.time: Time of day portion of a `datetime` string or object

    >>> make_date('')
    datetime.date(1970, 1, 1)
    >>> make_date(None)
    datetime.date(1970, 1, 1)
    >>> make_date("11:59 PM") == datetime.date.today()
    True
    >>> make_date(datetime.datetime(1999, 12, 31, 23, 59, 59))
    datetime.date(1999, 12, 31)
    >>> make_datetime(['1970-10-31', '1970-12-25'])  # doctest: +NORMALIZE_WHITESPACE
    [datetime.datetime(1970, 10, 31, 0, 0), datetime.datetime(1970, 12, 25, 0, 0)]