def determine_date_type(values, datemode=0):
    normal_types_set = set()

    for v in values:
        # Skip blanks 
        if v == '':
            continue

        v_tuple = xlrd.xldate_as_tuple(v, datemode)

        if v_tuple == (0, 0, 0, 0, 0, 0):
            # Midnight 
            normal_types_set.add(datetime.time)
        elif v_tuple[3:] == (0, 0, 0):
            # Date only
            normal_types_set.add(datetime.date)
        elif v_tuple[:3] == (0, 0, 0):
            # Time only
            normal_types_set.add(datetime.time)
        else:
            # Date and time
            normal_types_set.add(datetime.datetime)

    if len(normal_types_set) == 1:
        # No special handling if column contains only one type
        return normal_types_set.pop()
    elif normal_types_set == set([datetime.datetime, datetime.date]):
        # If a mix of dates and datetimes, up-convert dates to datetimes
        return datetime.datetime
    elif normal_types_set == set([datetime.datetime, datetime.time]):
        # Datetimes and times don't mix
        return unicode
    elif normal_types_set == set([datetime.date, datetime.time]):
        # Dates and times don't mix
        return unicode
Determine if an Excel date column really contains dates...
dataset/ETHPy150Open pandaproject/panda/panda/utils/xls.py/determine_date_type