类型转换辅助工具类

来源:互联网 发布:复利农场源码 编辑:程序博客网 时间:2024/05/17 20:43
package com.saicfc.saicifx3.util;import java.math.BigDecimal;import java.sql.Date;import java.sql.Time;import java.sql.Timestamp;import java.text.DateFormat;import java.text.NumberFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Locale;/** * 类型转换辅助工具类 *  * @author ShenHuaJie * @since 2011-11-08 */public class TypeParseUtils {    /**     * 转换核心实现方法     *      * @param value     * @param type 目标数据类型     * @param format 输入/输出字符串格式     * @return Object     * @throws DataParseException     */    public static Object convert(Object value, Class<?> type, String format)                                                                            throws DataParseException {        return convert(value, type.getName(), format);    }    /**     * 转换核心实现方法     *      * @param value     * @param type 目标数据类型     * @param format 输入/输出字符串格式     * @return Object     * @throws DataParseException     */    public static Object convert(Object value, String type, String format)                                                                          throws DataParseException {        Locale locale = Locale.getDefault();        String message = "Could not convert %1$s to %2$s";        String support = "Convert from %1$s to %2$s not currently supported";        if (value == null)            return null;        if (value.getClass().getName().equalsIgnoreCase(type)            || value.getClass().getSimpleName().equalsIgnoreCase(type))            return value;        if ("Object".equalsIgnoreCase(type) || "java.lang.Object".equals(type))            return value;        String fromType = null;        if (value instanceof String) {            fromType = "String";            String str = (String) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return value;            if (str.length() == 0)                return null;            if ("Boolean".equalsIgnoreCase(type) || "java.lang.Boolean".equals(type)) {                if (str.equalsIgnoreCase("TRUE"))                    return new Boolean(true);                else                    return new Boolean(false);            }            if ("Double".equalsIgnoreCase(type) || "java.lang.Double".equalsIgnoreCase(type))                try {                    Number tempNum = getNf(locale).parse(str.replaceAll(",", ""));                    return new Double(tempNum.doubleValue());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            if ("BigDecimal".equalsIgnoreCase(type)                || "java.math.BigDecimal".equalsIgnoreCase(type))                try {                    BigDecimal retBig = new BigDecimal(str.replaceAll(",", ""));                    int iscale = str.indexOf(".");                    int keylen = str.length();                    if (iscale > -1) {                        iscale = keylen - (iscale + 1);                        return retBig.setScale(iscale, 5);                    } else {                        return retBig.setScale(0, 5);                    }                } catch (Exception e) {                    throw new DataParseException(String.format(message, str, type), e);                }            if ("Float".equalsIgnoreCase(type) || "java.lang.Float".equalsIgnoreCase(type))                try {                    Number tempNum = getNf(locale).parse(str.replaceAll(",", ""));                    return new Float(tempNum.floatValue());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            if ("Long".equalsIgnoreCase(type) || "java.lang.Long".equalsIgnoreCase(type))                try {                    NumberFormat nf = getNf(locale);                    nf.setMaximumFractionDigits(0);                    Number tempNum = nf.parse(str.replaceAll(",", ""));                    return new Long(tempNum.longValue());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            if ("Integer".equalsIgnoreCase(type) || "java.lang.Integer".equalsIgnoreCase(type))                try {                    NumberFormat nf = getNf(locale);                    nf.setMaximumFractionDigits(0);                    Number tempNum = nf.parse(str.replaceAll(",", ""));                    return new Integer(tempNum.intValue());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            if ("Date".equalsIgnoreCase(type) || "java.util.Date".equalsIgnoreCase(type)) {                if (format == null || format.length() == 0) {                    String separator = String.valueOf(str.charAt(4));                    StringBuilder pattern;                    if (separator.matches("\\d*")) {                        pattern = new StringBuilder("yyyyMMdd HH:mm:ss");                        format = pattern.substring(0, str.length());                    } else {                        pattern = new StringBuilder("yyyy").append(separator).append("MM").append(                            separator).append("dd HH:mm:ss");                        format = pattern.substring(0, str.length());                    }                }                try {                    SimpleDateFormat sdf = new SimpleDateFormat(format);                    java.util.Date fieldDate = sdf.parse(str);                    return new Date(fieldDate.getTime());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            }            if ("java.sql.Date".equalsIgnoreCase(type)) {                if (format == null || format.length() == 0)                    try {                        return Date.valueOf(str);                    } catch (Exception e) {                        try {                            DateFormat df = null;                            if (locale != null)                                df = DateFormat.getDateInstance(3, locale);                            else                                df = DateFormat.getDateInstance(3);                            java.util.Date fieldDate = df.parse(str);                            return new Date(fieldDate.getTime());                        } catch (ParseException e1) {                            throw new DataParseException(String.format(message, str, type), e);                        }                    }                try {                    SimpleDateFormat sdf = new SimpleDateFormat(format);                    java.util.Date fieldDate = sdf.parse(str);                    return new Date(fieldDate.getTime());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            }            if ("Timestamp".equalsIgnoreCase(type) || "java.sql.Timestamp".equalsIgnoreCase(type)) {                if (str.length() == 10)                    str = str + " 00:00:00";                if (format == null || format.length() == 0)                    try {                        return Timestamp.valueOf(str);                    } catch (Exception e) {                        try {                            DateFormat df = null;                            if (locale != null)                                df = DateFormat.getDateTimeInstance(3, 3, locale);                            else                                df = DateFormat.getDateTimeInstance(3, 3);                            java.util.Date fieldDate = df.parse(str);                            return new Timestamp(fieldDate.getTime());                        } catch (ParseException e1) {                            throw new DataParseException(String.format(message, str, type), e);                        }                    }                try {                    SimpleDateFormat sdf = new SimpleDateFormat(format);                    java.util.Date fieldDate = sdf.parse(str);                    return new Timestamp(fieldDate.getTime());                } catch (ParseException e) {                    throw new DataParseException(String.format(message, str, type), e);                }            } else {                throw new DataParseException(String.format(support, fromType, type));            }        }        if (value instanceof BigDecimal) {            fromType = "BigDecimal";            BigDecimal bigD = (BigDecimal) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return getNf(locale).format(bigD.doubleValue());            if ("BigDecimal".equalsIgnoreCase(type)                || "java.math.BigDecimal".equalsIgnoreCase(type))                return value;            if ("Double".equalsIgnoreCase(type) || "java.lang.Double".equalsIgnoreCase(type))                return new Double(bigD.doubleValue());            if ("Float".equalsIgnoreCase(type) || "java.lang.Float".equalsIgnoreCase(type))                return new Float(bigD.floatValue());            if ("Long".equalsIgnoreCase(type) || "java.lang.Long".equalsIgnoreCase(type))                return new Long(Math.round(bigD.doubleValue()));            if ("Integer".equals(type) || "java.lang.Integer".equalsIgnoreCase(type))                return new Integer((int) Math.round(bigD.doubleValue()));            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Double) {            fromType = "Double";            Double dbl = (Double) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return getNf(locale).format(dbl.doubleValue());            if ("Double".equalsIgnoreCase(type) || "java.lang.Double".equalsIgnoreCase(type))                return value;            if ("Float".equalsIgnoreCase(type) || "java.lang.Float".equalsIgnoreCase(type))                return new Float(dbl.floatValue());            if ("Long".equalsIgnoreCase(type) || "java.lang.Long".equalsIgnoreCase(type))                return new Long(Math.round(dbl.doubleValue()));            if ("Integer".equalsIgnoreCase(type) || "java.lang.Integer".equalsIgnoreCase(type))                return new Integer((int) Math.round(dbl.doubleValue()));            if ("BigDecimal".equalsIgnoreCase(type)                || "java.math.BigDecimal".equalsIgnoreCase(type))                return new BigDecimal(dbl.toString());            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Float) {            fromType = "Float";            Float flt = (Float) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return getNf(locale).format(flt.doubleValue());            if ("BigDecimal".equalsIgnoreCase(type)                || "java.math.BigDecimal".equalsIgnoreCase(type))                return new BigDecimal(flt.doubleValue());            if ("Double".equalsIgnoreCase(type) || "java.lang.Double".equalsIgnoreCase(type))                return new Double(flt.doubleValue());            if ("Float".equalsIgnoreCase(type) || "java.lang.Float".equalsIgnoreCase(type))                return value;            if ("Long".equalsIgnoreCase(type) || "java.lang.Long".equalsIgnoreCase(type))                return new Long(Math.round(flt.doubleValue()));            if ("Integer".equalsIgnoreCase(type) || "java.lang.Integer".equalsIgnoreCase(type))                return new Integer((int) Math.round(flt.doubleValue()));            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Long) {            fromType = "Long";            Long lng = (Long) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return getNf(locale).format(lng.longValue());            if ("Double".equalsIgnoreCase(type) || "java.lang.Double".equalsIgnoreCase(type))                return new Double(lng.doubleValue());            if ("Float".equalsIgnoreCase(type) || "java.lang.Float".equalsIgnoreCase(type))                return new Float(lng.floatValue());            if ("BigDecimal".equalsIgnoreCase(type)                || "java.math.BigDecimal".equalsIgnoreCase(type))                return new BigDecimal(lng.toString());            if ("Long".equalsIgnoreCase(type) || "java.lang.Long".equalsIgnoreCase(type))                return value;            if ("Integer".equalsIgnoreCase(type) || "java.lang.Integer".equalsIgnoreCase(type))                return new Integer(lng.intValue());            if ("Date".equalsIgnoreCase(type) || "java.util.Date".equalsIgnoreCase(type))                return new java.util.Date(lng);            if ("java.sql.Date".equalsIgnoreCase(type))                return new Date(lng);            if ("Time".equalsIgnoreCase(type) || "java.sql.Time".equalsIgnoreCase(type))                return new Time(lng);            if ("Timestamp".equalsIgnoreCase(type) || "java.sql.Timestamp".equalsIgnoreCase(type))                return new Timestamp(lng);            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Integer) {            fromType = "Integer";            Integer intgr = (Integer) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return getNf(locale).format(intgr.longValue());            if ("Double".equalsIgnoreCase(type) || "java.lang.Double".equalsIgnoreCase(type))                return new Double(intgr.doubleValue());            if ("Float".equalsIgnoreCase(type) || "java.lang.Float".equalsIgnoreCase(type))                return new Float(intgr.floatValue());            if ("BigDecimal".equalsIgnoreCase(type)                || "java.math.BigDecimal".equalsIgnoreCase(type)) {                String str = intgr.toString();                BigDecimal retBig = new BigDecimal(intgr.doubleValue());                int iscale = str.indexOf(".");                int keylen = str.length();                if (iscale > -1) {                    iscale = keylen - (iscale + 1);                    return retBig.setScale(iscale, 5);                } else {                    return retBig.setScale(0, 5);                }            }            if ("Long".equalsIgnoreCase(type) || "java.lang.Long".equalsIgnoreCase(type))                return new Long(intgr.longValue());            if ("Integer".equalsIgnoreCase(type) || "java.lang.Integer".equalsIgnoreCase(type))                return value;            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof java.util.Date) {            fromType = "Date";            java.util.Date dte = (java.util.Date) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                if (format == null || format.length() == 0) {                    return dte.toString();                } else {                    SimpleDateFormat sdf = new SimpleDateFormat(format);                    return sdf.format(dte);                }            if ("Date".equalsIgnoreCase(type) || "java.util.Date".equalsIgnoreCase(type))                return value;            if ("java.sql.Date".equalsIgnoreCase(type))                return new Date(dte.getTime());            if ("Time".equalsIgnoreCase(type) || "java.sql.Time".equalsIgnoreCase(type))                return new Time(dte.getTime());            if ("Timestamp".equalsIgnoreCase(type) || "java.sql.Timestamp".equalsIgnoreCase(type))                return new Timestamp(dte.getTime());            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Date) {            fromType = "Date";            Date dte = (Date) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                if (format == null || format.length() == 0) {                    return dte.toString();                } else {                    SimpleDateFormat sdf = new SimpleDateFormat(format);                    return sdf.format(new java.util.Date(dte.getTime()));                }            if ("Date".equalsIgnoreCase(type) || "java.util.Date".equalsIgnoreCase(type))                return new java.util.Date(dte.getTime());            if ("java.sql.Date".equalsIgnoreCase(type))                return value;            if ("Time".equalsIgnoreCase(type) || "java.sql.Time".equalsIgnoreCase(type))                throw new DataParseException("Conversion from " + fromType + " to " + type                                             + " not currently supported");            if ("Timestamp".equalsIgnoreCase(type) || "java.sql.Timestamp".equalsIgnoreCase(type))                return new Timestamp(dte.getTime());            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Timestamp) {            fromType = "Timestamp";            Timestamp tme = (Timestamp) value;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                if (format == null || format.length() == 0) {                    return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(tme).toString();                } else {                    SimpleDateFormat sdf = new SimpleDateFormat(format);                    return sdf.format(new java.util.Date(tme.getTime()));                }            if ("Date".equalsIgnoreCase(type) || "java.util.Date".equalsIgnoreCase(type))                return new java.util.Date(tme.getTime());            if ("java.sql.Date".equalsIgnoreCase(type))                return new Date(tme.getTime());            if ("Time".equalsIgnoreCase(type) || "java.sql.Time".equalsIgnoreCase(type))                return new Time(tme.getTime());            if ("Timestamp".equalsIgnoreCase(type) || "java.sql.Timestamp".equalsIgnoreCase(type))                return value;            else                throw new DataParseException(String.format(support, fromType, type));        }        if (value instanceof Boolean) {            fromType = "Boolean";            Boolean bol = (Boolean) value;            if ("Boolean".equalsIgnoreCase(type) || "java.lang.Boolean".equalsIgnoreCase(type))                return bol;            if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))                return bol.toString();            if ("Integer".equalsIgnoreCase(type) || "java.lang.Integer".equalsIgnoreCase(type)) {                if (bol.booleanValue())                    return new Integer(1);                else                    return new Integer(0);            } else {                throw new DataParseException(String.format(support, fromType, type));            }        }        if ("String".equalsIgnoreCase(type) || "java.lang.String".equalsIgnoreCase(type))            return value.toString();        else            throw new DataParseException(String.format(support, fromType, type));    }    private static NumberFormat getNf(Locale locale) {        NumberFormat nf = null;        if (locale == null)            nf = NumberFormat.getNumberInstance();        else            nf = NumberFormat.getNumberInstance(locale);        nf.setGroupingUsed(false);        return nf;    }    /** 转换为布尔值 */    public static Boolean convertToBoolean(Object obj) throws DataParseException {        return (Boolean) convert(obj, "Boolean", null);    }    /** 转换为整型 */    public static Integer convertToInteger(Object obj) throws DataParseException {        return (Integer) convert(obj, "Integer", null);    }    /** 转换为字符串 */    public static String convertToString(Object obj) throws DataParseException {        return (String) convert(obj, "String", null);    }    /** 转换为字符串 */    public static String convertToString(Object obj, String defaultValue) throws DataParseException {        Object s = convert(obj, "String", null);        if (s != null)            return (String) s;        else            return "";    }    /** 转换为长整型 */    public static Long convertToLong(Object obj) throws DataParseException {        return (Long) convert(obj, "Long", null);    }    /** 转换为双精度型 */    public static Double convertToDouble(Object obj) throws DataParseException {        return (Double) convert(obj, "Double", null);    }    /** 转换为浮点型 */    public static Double convertToFloat(Object obj) throws DataParseException {        return (Double) convert(obj, "Float", null);    }    /** 转换为数值型 */    public static BigDecimal convertToBigDecimal(Object obj, int scale) throws DataParseException {        return ((BigDecimal) convert(obj, "BigDecimal", null)).setScale(scale, 5);    }    /** 转换为日期型 */    public static java.util.Date convertToDate(Object obj, String format) throws DataParseException {        return (java.util.Date) convert(obj, "Date", format);    }    /** 转换为日期型 */    public static Date convertToSqlDate(Object obj, String format) throws DataParseException {        return (Date) convert(obj, "java.sql.Date", format);    }    /** 转换为日期型 */    public static Timestamp convertToTimestamp(Object obj, String format) throws DataParseException {        return (Timestamp) convert(obj, "Timestamp", format);    }}class DataParseException extends RuntimeException {    /**     *      */    private static final long serialVersionUID = -2687839831605219566L;    public DataParseException() {    }    public DataParseException(Throwable ex) {        super(ex);    }    public DataParseException(String message) {        super(message);    }    public DataParseException(String message, Throwable ex) {        super(message, ex);    }}

0 0