对数据的处理 :(对空字符串、Null、时间间隔、日期格式等)

package java;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.paic.pafa.app.lwc.core.util.DevLog;
import com.paic.pafa.app.lwc.core.util.StringUtils;

public class CommonFunctions {
	private static final Log logger = LogFactory.getLog(CommonFunctions.class);

	private CommonFunctions() {
	}

	private static final Map certificateTypeMap = new HashMap();
	private static final Map caseMap = new HashMap();
	static {
		certificateTypeMap.put("01", "1");
		certificateTypeMap.put("02", "2");
		certificateTypeMap.put("03", "3");
		certificateTypeMap.put("05", "7");
		certificateTypeMap.put("06", "6");
		certificateTypeMap.put("99", "0");

		caseMap.put("A", "0");
		caseMap.put("B", "(0,1000]");
		caseMap.put("C", "(1000,3000]");
		caseMap.put("D", "(3000,5000]");
		caseMap.put("E", "(5000,10000]");
		caseMap.put("F", "(10000,50000]");
		caseMap.put("G", "(50000,+∞)");
	}

	private static final List PREDEFINED_CLASS_LIST = Arrays
			.asList(new Class[] { Date.class, String.class, Boolean.class,
					Class.class, Float.class, Integer.class, Double.class,
					Long.class });

	private static final List DEFAULT_IGNORE_PROPERTY_NAME = Arrays
			.asList(new String[] { "class" });

	public static final String EMPTY_STRING = "";

	public static final NumberFormat DEFAULT_NUMBER_FORMAT = new DecimalFormat(
			"#.##");

	public static final NumberFormat NUMBER_FORMAT_00_00 = new DecimalFormat(
			"0.##");

	public static final NumberFormat NUMBER_FORMAT_00_00_ZERO_PRESENT = new DecimalFormat(
			"0.00");

	public static final NumberFormat NUMBER_FORMAT_00_0000 = new DecimalFormat(
			"0.####");

	private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

	public static final String DATE_FORMAT_YYYY = "yyyy";

	public static final String DATE_FORMAT_MM = "MM";

	public static final String DATE_FORMAT_DD = "dd";

	public static final String DATE_FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

	public static final String DATE_FORMAT_YYYY_MM_DD = DEFAULT_DATE_FORMAT;

	public static final String DATE_FORMAT_YYYY_MM_DD_NO_SEPATOR = "yyyyMMdd";

	private static final String[] NUM_NAMES = { "零", "壹", "贰", "叁", "肆", "伍",
			"陆", "柒", "捌", "玖" };

	private static final String[] DIGITAL_NAMES = { "", "", "拾", "佰", "仟", "万",
			"拾" };

	private static String convertForInteger(String num) throws Exception {
		if (Integer.parseInt(num) == 0)
			return "";
		char[] list = num.toCharArray();
		Stack stack = new Stack();
		boolean _continual = false;
		for (int i = 1; i < list.length + 1; i++) {
			int pos = list.length - i;
			int _v = Integer.parseInt(String.valueOf(list[pos]));
			if (_v == 0) {
				if (!_continual) {
					_continual = true;
				}
			} else {
				if (_continual) {
					stack.push("零");
					_continual = false;
				}
				stack.push(DIGITAL_NAMES[i]);
				stack.push(NUM_NAMES[_v]);
			}

		}
		StringBuffer sb = new StringBuffer();
		while (!stack.empty()) {
			sb.append((String) stack.pop());
		}
		String value = sb.toString();
		if (value.endsWith("零")) {
			value = value.substring(0, value.length() - 1);
		}
		return value + "元";
	}

	private static String convertForFraction(String num) throws Exception {
		if (num.length() < 2) {
			num = num + "0";
		}
		char[] list = num.toCharArray();
		int _v1 = Integer.parseInt(String.valueOf(list[0]));
		int _v2 = Integer.parseInt(String.valueOf(list[1]));
		if (_v1 == 0 && _v2 == 0) {
			return "";
		} else {
			String value = "";
			if (_v1 != 0) {
				value = value + NUM_NAMES[_v1] + "角";
			}
			if (_v2 != 0) {
				value = value + NUM_NAMES[_v2] + "分";
			}
			return value;
		}
	}

	/**
	 * 数字转换成中文表示. 如1500->壹仟伍佰元
	 * 
	 * @param num
	 * @return
	 * @throws Exception
	 */
	public static String convertNumberToChinese(String num) throws Exception {
		int pos = num.indexOf(".");
		String result = "";
		if (pos > -1) {
			String value1 = convertForInteger(num.substring(0, pos));
			String value2 = convertForFraction(num.substring(pos + 1));
			if (!StringUtils.hasText(value2)) {
				value2 = "整";
			}
			result = value1 + value2;
		} else {
			result = convertForInteger(num) + "整";
		}
		if ("整".equals(result)) {
			return "零元整";
		}
		return result;
	}

	/**
	 * 把bean转换成Map. 目前有点问题,不要调用
	 * 
	 * @param bean
	 * @return
	 */
	public static Map beanToMap(Object bean) {
		if (null == bean)
			return new HashMap(0);
		Map m = new HashMap();
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
			PropertyDescriptor[] propertyDescriptors = beanInfo
					.getPropertyDescriptors();
			for (int i = 0; i < propertyDescriptors.length; i++) {
				Object value = propertyDescriptors[i].getReadMethod().invoke(
						bean, null);
				if (DEFAULT_IGNORE_PROPERTY_NAME
						.contains(propertyDescriptors[i].getName())) {
					continue;
				} else if (value == null) {
					m.put(propertyDescriptors[i].getName(), null);
				} else if (PREDEFINED_CLASS_LIST.contains(value.getClass())) {
					m.put(propertyDescriptors[i].getName(), value);
				} else if (value instanceof List) {
					List l = (List) value;
					List convertedList = new ArrayList(l.size());
					for (Iterator iter = l.iterator(); iter.hasNext();) {
						Object element = (Object) iter.next();
						if (element == null) {
							convertedList.add(null);
						} else if (PREDEFINED_CLASS_LIST.contains(element
								.getClass())) {
							convertedList.add(element);
						} else {
							convertedList.add(beanToMap(element));
						}
					}
					m.put(propertyDescriptors[i].getName(), convertedList);
				} else {
					m.put(propertyDescriptors[i].getName(), beanToMap(value));
				}
			}
		} catch (Exception e) {
			e.printStackTrace(System.err);
			return new HashMap(0);
		}
		return m;
	}

	private static final String NULL_STRING = "null";

	/**
	 * 以className[field1=value1,field2=value2,...]的形式返回bean的字符串表示
	 * 
	 * @param bean
	 * @return
	 */
	public static String introspectBean(Object bean) {
		return introspectBean(bean, null);
	}

	/**
	 * 以className[field1=value1,field2=value2,...]的形式返回bean的字符串表示
	 * 
	 * @param bean
	 * @param ignorePropertyNames
	 *            忽略的属性名称. 若传入null则返回所有属性
	 * @return
	 */
	public static String introspectBean(Object bean,
			String[] ignorePropertyNames) {
		if (null == bean) {
			return NULL_STRING;
		}
		StringBuffer sb = new StringBuffer();
		List ignorePropertyNameList = new ArrayList(0);
		if (null != ignorePropertyNames && ignorePropertyNames.length > 0) {
			ignorePropertyNameList = Arrays.asList(ignorePropertyNames);
		}
		sb.append(bean.getClass().getName());
		sb.append('[');
		sb.append('
');
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
			PropertyDescriptor[] propertyDescriptors = beanInfo
					.getPropertyDescriptors();
			for (int i = 0; i < propertyDescriptors.length; i++) {
				String propertyName = propertyDescriptors[i].getName();
				if (ignorePropertyNameList.contains(propertyName)) {
					continue;
				}
				Object propertyValue = propertyDescriptors[i].getReadMethod()
						.invoke(bean, null);
				sb.append('	');
				sb.append(propertyName);
				sb.append('=');
				sb.append(propertyValue);
				sb.append(',');
				sb.append('
');
			}
		} catch (Exception e) {
			return bean.getClass().getName()
					+ ".toString() failed with exception:" + e.getMessage();
		}
		sb.append(']');
		return sb.toString();
	}

	/**
	 * 字符串的空值处理
	 */
	public static boolean isEmpty(String str) {
		if ((str == null) || (str.equals("null"))) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 字符串的空值处理
	 */
	public static String changeNullStringToEmpty(String str) {
		if ((str == null) || (str.equals("null"))) {
			return "";
		} else {
			return str.trim();
		}
	}

	/**
	 * 对象toString的空值处理
	 */
	public static String changeNullStringToEmpty(Object obj) {
		if (obj == null) {
			return "";
		} else {
			return obj.toString();
		}
	}

	/**
	 * 将空字符串变为指定的值 add by zhaopu
	 */
	public static String changeNullStringToValue(String str, String Value) {
		if (str == null) {
			return Value;
		} else {
			return str.trim();
		}
	}

	/**
	 * 将空字符和null串变为指定的值 add by wanghl 2003-10-23
	 */
	public static String changeEmptyStringToValue(String str, String Value) {
		if (str == null || "".equals(str.trim())) {
			return Value;
		} else {
			return str.trim();
		}
	}

	/**
	 * 将datetime类型的时间转化成字符串 YYYY-MM-DD
	 */
	public static String changeDateFormat(java.sql.Date dateTime) {
		if (dateTime == null) {
			return "";
		} else {
			Calendar calen = Calendar.getInstance();
			calen.setTime(dateTime);
			String year = new Integer(calen.get(Calendar.YEAR)).toString();
			String month = new Integer(calen.get(Calendar.MONTH) + 1)
					.toString();
			if (month.length() < 2) {
				month = "0" + month;
			}
			String date = new Integer(calen.get(Calendar.DATE)).toString();
			if (date.length() < 2) {
				date = "0" + date;

			}
			return year + "-" + month + "-" + date;
		}
	}

	/**
	 * 将datetime类型的时间转化成字符串 YYYY-MM-DD HH:MI:SS
	 */
	public static String changeDateTimeFormat(java.sql.Date dateTime) {
		if (dateTime == null) {
			return "";
		} else {
			Calendar calen = Calendar.getInstance();
			calen.setTime(dateTime);
			String year = new Integer(calen.get(Calendar.YEAR)).toString();
			String month = new Integer(calen.get(Calendar.MONTH) + 1)
					.toString();
			if (month.length() < 2) {
				month = "0" + month;
			}
			String date = new Integer(calen.get(Calendar.DATE)).toString();
			if (date.length() < 2) {
				date = "0" + date;

			}
			String hour = new Integer(calen.get(Calendar.HOUR_OF_DAY))
					.toString();
			if (hour.length() < 2) {
				hour = "0" + hour;
			}
			String minute = new Integer(calen.get(Calendar.MINUTE)).toString();
			if (minute.length() < 2) {
				minute = "0" + minute;

			}
			return year + "-" + month + "-" + date + " " + hour + ":" + minute;
		}
	}

	public static List split(String str1, String str2) {
		List ret = new ArrayList();
		if (str1 == null || str1.equals(""))
			return ret;
		while (str1.indexOf(str2) >= 0) {
			String temp = str1.substring(0, str1.indexOf(str2));
			str1 = str1.substring(str1.indexOf(str2) + str2.length());
			ret.add(temp);
		}
		ret.add(str1);
		return ret;
	}

	/**
	 * 分割字符串
	 * 
	 * @param source
	 *            源字符串
	 * @param separator
	 *            分隔符
	 * @return 分割后的字符串
	 */
	public static String[] splitString(String source, String separator) {
		if (!StringUtils.hasText(source)) {
			return new String[0];
		}
		StringTokenizer st = new StringTokenizer(source, separator);
		String[] result = new String[st.countTokens()];
		for (int i = 0; st.hasMoreTokens();) {
			result[i++] = st.nextToken();
		}
		return result;
	}

	/**
	 * 转换日期格式
	 */
	public static String formatDateString(String dateTime, String inputFormat,
			String outputFormat) {
		try {
			if (dateTime == null || dateTime.equals("")) {
				return "";
			}

			java.text.SimpleDateFormat iFormat = new java.text.SimpleDateFormat(
					inputFormat);
			java.util.Date iDate = iFormat.parse(dateTime);

			java.text.SimpleDateFormat oFormat = new java.text.SimpleDateFormat(
					outputFormat);
			String sRet = oFormat.format(iDate);
			return sRet;
		} catch (Exception e) {
			return "";
		}
	}

	/**
	 * 转换平台日期
	 * 
	 * @param circDate
	 *            yyyyMMddHHmm or yyyyMMdd
	 * @return
	 */
	public static String formatCircDate(String circDate) {
		if (!StringUtils.hasText(circDate)) {
			return "";
		}
		if (12 == circDate.length()) {
			String year = circDate.substring(0, 4);
			String month = circDate.substring(4, 6);
			String day = circDate.substring(6, 8);
			String hour = circDate.substring(8, 10);
			String minute = circDate.substring(10, 12);
			StringBuffer sb = new StringBuffer(25).append(year).append("年")
					.append(month).append("月").append(day).append("日")
					.append(hour).append(":").append(minute);
			return sb.toString();
		} else if (8 == circDate.length()) {
			String year = circDate.substring(0, 4);
			String month = circDate.substring(4, 6);
			String day = circDate.substring(6, 8);
			StringBuffer sb = new StringBuffer(25).append(year).append("年")
					.append(month).append("月").append(day).append("日");
			return sb.toString();
		}
		return "";
	}

	/**
	 * 取两个日期间隔的工作日数
	 * 
	 * @param fromDate
	 * @param toDate
	 * @return
	 */
	public static int getDays(String fromDate, String toDate) {
		int elapsed = 0;
		if (fromDate == null || fromDate.equals("") || toDate == null
				|| toDate.equals("")) {
			return 0;
		}

		GregorianCalendar gc1, gc2;

		try {
			int tempYear1 = Integer.parseInt(fromDate.substring(0, 4));
			int tempMonth1 = Integer.parseInt(fromDate.substring(5, 7));
			int tempDay1 = Integer.parseInt(fromDate.substring(8, 10));
			int tempYear2 = Integer.parseInt(toDate.substring(0, 4));
			int tempMonth2 = Integer.parseInt(toDate.substring(5, 7));
			int tempDay2 = Integer.parseInt(toDate.substring(8, 10));

			GregorianCalendar g1 = new GregorianCalendar(tempYear1,
					tempMonth1 - 1, tempDay1);
			GregorianCalendar g2 = new GregorianCalendar(tempYear2,
					tempMonth2 - 1, tempDay2);

			if (g2.after(g1)) {
				gc2 = (GregorianCalendar) g2.clone();
				gc1 = (GregorianCalendar) g1.clone();
			} else {
				gc2 = (GregorianCalendar) g1.clone();
				gc1 = (GregorianCalendar) g2.clone();
			}
			gc1.clear(Calendar.MILLISECOND);
			gc1.clear(Calendar.SECOND);
			gc1.clear(Calendar.MINUTE);
			gc1.clear(Calendar.HOUR_OF_DAY);
			gc2.clear(Calendar.MILLISECOND);
			gc2.clear(Calendar.SECOND);
			gc2.clear(Calendar.MINUTE);
			gc2.clear(Calendar.HOUR_OF_DAY);
			while (gc1.before(gc2)) {
				gc1.add(Calendar.DATE, 1);
				elapsed++;
			}
			return elapsed;
		} catch (Exception e) {
			return 0;
		}
	}

	/**
	 * 转换页面显示格式
	 */
	public static String changeShowFormat(String str) {
		return (str.equals("") ? " " : str);
	}

	public static String getGBCode(String str) {
		String temp = null;
		try {
			String temp_p = str;
			byte[] temp_t = temp_p.getBytes("ISO8859-1");
			temp = new String(temp_t);
		} catch (Exception e) {
			// System.out.println("错误:"+e.getMessage());
		}
		return temp;
		/*
		 * finally { return str; }
		 */
	}

	/**
	 * 实例化当前系统时间
	 */
	private static Calendar getCalendar() {
		return Calendar.getInstance();
	}

	/**
	 * 取得当前年
	 */
	public static String getYear() {
		return new Integer(getCalendar().get(Calendar.YEAR)).toString();
	}

	/**
	 * 取得当前月
	 */
	public static String getMonth() {
		String month = new Integer(getCalendar().get(Calendar.MONTH) + 1)
				.toString();
		if (month.length() < 2) {
			month = "0" + month;
		}
		return month;
	}

	/**
	 * 取得当前日
	 */
	public static String getDate() {
		String date = new Integer(getCalendar().get(Calendar.DATE)).toString();
		if (date.length() < 2) {
			date = "0" + date;
		}
		return date;
	}

	/**
	 * 取得当前小时
	 */
	public static String getHour() {
		String hour = new Integer(getCalendar().get(Calendar.HOUR)).toString();
		if (hour.length() < 2) {
			hour = "0" + hour;
		}
		return hour;
	}

	/**
	 * 取得当前分钟
	 */
	public static String getMinute() {
		String min = new Integer(getCalendar().get(Calendar.MINUTE)).toString();
		if (min.length() < 2) {
			min = "0" + min;
		}
		return min;
	}

	/**
	 * 取得当前日期
	 * 
	 * @return 形如yyyy-mm-dd格式的日期
	 */
	public static String getCurrentDate() {
		java.util.Date curDate = new java.util.Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

		return df.format(curDate);
	}

	/**
	 * 取得当前时间(包括小时分)
	 * 
	 * @return 形如yyyy-mm-dd HH:mm格式的日期
	 */
	public static String getCurrentDateTime() {
		java.util.Date curDate = new java.util.Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

		return df.format(curDate);
	}

	/**
	 * 返回系统日期的后N天
	 * 
	 * @para days为正数表示当前日期的后N天 days为负数表示当前日期的前N天
	 * @return 形如yyyy-mm-dd格式的日期
	 */
	public static String getNextDays(int days) {
		Calendar cld = Calendar.getInstance();
		cld.add(Calendar.DATE, days);
		String yy = new Integer(cld.get(Calendar.YEAR)).toString();
		String mm = new Integer(cld.get(Calendar.MONTH) + 1).toString();
		String dd = new Integer(cld.get(Calendar.DATE)).toString();
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		return yy + "-" + mm + "-" + dd;
	}

	/**
	 * 返回日期strDate的后N天
	 * 
	 * @para days为正数表示当前日期的后N天 days为负数表示当前日期的前N天
	 * @return 形如yyyy-mm-dd格式的日期
	 */
	public static String getNextDays(String strDate, int days) {
		if (strDate == null || strDate.length() < 10) {
			return "";
		}
		int year = Integer.parseInt(strDate.substring(0, 4));
		int month = Integer.parseInt(strDate.substring(5, 7));
		int day = Integer.parseInt(strDate.substring(8, 10));

		Calendar cld = Calendar.getInstance();
		cld.set(year, month - 1, day);
		cld.add(Calendar.DATE, days);

		String yy = new Integer(cld.get(Calendar.YEAR)).toString();
		String mm = new Integer(cld.get(Calendar.MONTH) + 1).toString();
		String dd = new Integer(cld.get(Calendar.DATE)).toString();

		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		if (dd.length() < 2) {
			dd = "0" + dd;

		}
		return yy + "-" + mm + "-" + dd;
	}

	private static final Calendar CAL1 = Calendar.getInstance();

	private static final Calendar CAL2 = Calendar.getInstance();

	public static synchronized boolean dateInTerm(Date begin, Date end,
			Date target) {
		CAL1.setTime(begin);
		CAL1.set(Calendar.HOUR, 0);
		CAL1.set(Calendar.MINUTE, 0);
		CAL1.set(Calendar.SECOND, 0);
		CAL2.setTime(end);
		CAL2.set(Calendar.HOUR, 23);
		CAL2.set(Calendar.MINUTE, 59);
		CAL2.set(Calendar.SECOND, 59);
		long targetTimeInMills = target.getTime();
		DevLog.trace("CommonFunctions.dateInTerm start...");
		DevLog.debug("polyBegin date:" + CAL1.getTime());
		DevLog.debug("polyEnd date:" + CAL2.getTime());
		DevLog.debug("target date:" + target);
		DevLog.debug("return value:"
				+ (CAL1.getTimeInMillis() <= targetTimeInMills && targetTimeInMills <= CAL2
						.getTimeInMillis()));
		DevLog.trace("CommonFunctions.dateInTerm end.");
		return CAL1.getTimeInMillis() <= targetTimeInMills
				&& targetTimeInMills <= CAL2.getTimeInMillis();
	}

	/**
	 * 返回系统日期的后x年,y月,z天
	 * 
	 * @para 为正数表示当前日期向后 为负数表示当前日期向前
	 * @return 形如yyyy-mm-dd格式的日期
	 */
	// add by zhaopu
	public static String getNextYearMonthDays(int years, int months, int days) {
		Calendar cld = Calendar.getInstance();
		cld.add(Calendar.YEAR, years);
		cld.add(Calendar.MONTH, months);
		cld.add(Calendar.DATE, days);
		String yy = new Integer(cld.get(Calendar.YEAR)).toString();
		String mm = new Integer(cld.get(Calendar.MONTH) + 1).toString();
		String dd = new Integer(cld.get(Calendar.DATE)).toString();
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		return yy + "-" + mm + "-" + dd;
	}

	/**
	 * 返回指定日期的后x年,y月,z天
	 * 
	 * @para 为正数表示当前日期向后 为负数表示当前日期向前
	 * @return 形如yyyy-mm-dd格式的日期
	 */
	// add by wq
	public static String getNextYearMonthDays(String strDate, int years,
			int months, int days) {
		if (strDate == null || strDate.length() < 10) {
			return "";
		}
		int year = Integer.parseInt(strDate.substring(0, 4));
		int month = Integer.parseInt(strDate.substring(5, 7)) - 1;
		int day = Integer.parseInt(strDate.substring(8, 10));
		Calendar cld = Calendar.getInstance();
		;
		cld.set(year, month, day);
		cld.add(Calendar.YEAR, years);
		cld.add(Calendar.MONTH, months);
		cld.add(Calendar.DATE, days);
		String yy = new Integer(cld.get(Calendar.YEAR)).toString();
		String mm = new Integer(cld.get(Calendar.MONTH) + 1).toString();
		String dd = new Integer(cld.get(Calendar.DATE)).toString();
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		return yy + "-" + mm + "-" + dd;
	}

	/**
	 * 比较两日期大小,日期1大于等于日期2 返回1,小于返回-1,等于返回0
	 */
	public static int compareDate(String date1, String date2) {
		int year1 = Integer.parseInt(date1.substring(0, 4));
		int month1 = Integer.parseInt(date1.substring(5, 7));
		int day1 = Integer.parseInt(date1.substring(8, 10));
		int year2 = Integer.parseInt(date2.substring(0, 4));
		int month2 = Integer.parseInt(date2.substring(5, 7));
		int day2 = Integer.parseInt(date2.substring(8, 10));

		if (year1 > year2) {
			return 1;
		} else if (year1 < year2) {
			return -1;
		} else if (year1 == year2) {
			if (month1 > month2) {
				return 1;
			} else if (month1 < month2) {
				return -1;
			} else if (month1 == month2) {
				if (day1 > day2) {
					return 1;
				} else if (day1 < day2) {
					return -1;
				} else {
					return 0;
				}
			}
		}
		return -2;
	}

	/**
	 * 日期转换,由字符串转换成java.sql.Date
	 */
	public static java.sql.Date getDateFormat(String value) {
		long templ = 0;
		if (value == null) {
			return null;
		}
		if (value.equals("")) {
			return null;
		} else if (value.length() == 10) {
			int tempYear = Integer.parseInt(value.substring(0, 4));
			int tempMonth = Integer.parseInt(value.substring(5, 7));
			int tempDay = Integer.parseInt(value.substring(8, 10));
			Calendar calen = Calendar.getInstance();
			calen.set(tempYear, tempMonth - 1, tempDay);
			templ = calen.getTime().getTime();
		} else if (value.length() == 7) {
			int tempYear = Integer.parseInt(value.substring(0, 4));
			int tempMonth = Integer.parseInt(value.substring(5, 7));
			Calendar calen = Calendar.getInstance();
			calen.set(tempYear, tempMonth - 1, 1);
			templ = calen.getTime().getTime();
		}

		return new java.sql.Date(templ);
	}

	/**
	 * 日期转换,由字符串转换成java.sql.Date
	 */
	public static java.sql.Date getTimeFormat(String value) {
		if (value == null) {
			return null;
		}
		if (value.equals("")) {
			return null;
		} else {
			int tempYear = Integer.parseInt(value.substring(0, 4));
			int tempMonth = Integer.parseInt(value.substring(5, 7));
			int tempDay = Integer.parseInt(value.substring(8, 10));
			int tempHour = Integer.parseInt(value.substring(11, 13));
			int tempMin = Integer.parseInt(value.substring(14, 16));
			int tempSec = Integer.parseInt(value.substring(17, 19));
			Calendar calen = Calendar.getInstance();
			calen.set(tempYear, tempMonth, tempDay, tempHour, tempMin, tempSec);
			return new java.sql.Date(calen.getTime().getTime());
		}
	}

	public static Date parseDate(String dateString, String pattern) {
		DateFormat df = pattern == null ? new SimpleDateFormat(
				DEFAULT_DATE_FORMAT) : new SimpleDateFormat(pattern);
		try {
			return df.parse(dateString);
		} catch (ParseException e) {
			throw new IllegalArgumentException("不能解析时间:" + dateString);
		}
	}

	public static Date parseDate(String dateString) {
		try {
			return new SimpleDateFormat(DEFAULT_DATE_FORMAT).parse(dateString);
		} catch (ParseException e) {
			throw new IllegalArgumentException("不能解析时间:" + dateString);
		}
	}

	public static Date parseYear(String dateString) {
		try {
			return new SimpleDateFormat(DATE_FORMAT_YYYY).parse(dateString);
		} catch (ParseException e) {
			throw new IllegalArgumentException("不能解析时间:" + dateString);
		}
	}

	// add by zhaopu 将日期转换为指定的格式
	public static String formatDate(Date date, String pattern) {
		if (date == null) {
			return "";
		}
		DateFormat df = pattern == null ? new SimpleDateFormat(
				DEFAULT_DATE_FORMAT) : new SimpleDateFormat(pattern);
		return df.format(date);
	}

	public static String formatDate(Date d) {
		return formatDate(d, null);
	}

	public static HashMap ConvertNullHashMap(Collection attributes) {
		HashMap returnHashMap = new HashMap();
		Iterator iterator = attributes.iterator();
		String tempStr = "";
		while (iterator.hasNext()) {
			String attributeName = (String) iterator.next();
			returnHashMap.put(attributeName, tempStr);
		}

		// System.out.println("转换hashmap:" + returnHashMap);
		return returnHashMap;
	}

	public static boolean invokeSetMethod(String property, String value,
			Object bean) {
		// 设置运行的方法名称
		String targetMethod = "set" + property.substring(0, 1).toUpperCase()
				+ property.substring(1, property.length());
		if (targetMethod == null) {
			return false;
		}

		try {
			Class[] args = new Class[] { String.class };

			Object[] params = new Object[] { value };

			Method m = bean.getClass().getMethod(targetMethod, args);

			if (m == null) {
				return false;
			}

			m.invoke(bean, params);

			return true;
		} catch (java.lang.NoSuchMethodException ex) {
			return false;
		} catch (java.lang.reflect.InvocationTargetException ex) {
			return false;
		} catch (java.lang.IllegalAccessException ex) {
			return false;
		}
	}

	public static Object invokeGetMethod(String property, Object bean) {
		Object returnValue = null;

		try {
			Class[] args = new Class[] {};

			Object[] params = new Object[] {};

			Method m = bean.getClass().getMethod(property, args);

			if (m == null) {
				return null;
			}

			returnValue = m.invoke(bean, params);

			return returnValue;
		} catch (java.lang.NoSuchMethodException ex) {
			return null;
		} catch (java.lang.reflect.InvocationTargetException ex) {
			return null;
		} catch (java.lang.IllegalAccessException ex) {
			return null;
		}
	}

	public static boolean binarySearch(String[] a, String aKey) {
		boolean result = false;

		if (a == null || a.length == 0 || aKey == null || aKey.equals("")) {
			return false;
		}

		for (int i = 0; i < a.length; i++) {
			if (aKey.equals(a[i])) {
				result = true;
				break;
			}
		}

		return result;
	}

	public static double parseDouble(String str) {
		double f = 0.0;
		try {
			f = Double.parseDouble(str);
		} catch (Exception ex) {
			// empty
		}

		return f;
	}

	public static String getSubString(String dateTime, int number) {
		if (dateTime.length() > number) {
			dateTime = dateTime.substring(0, number);
		}
		return dateTime;
	}

	public static String multiplyString(String originNumber, String multiplier) {
		int nOrigin = 0;
		int nMultiplier = 0;

		if ((originNumber == null || originNumber.equals(""))
				&& (multiplier == null || multiplier.equals(""))) {
			return "";
		}

		try {
			nOrigin = Integer.parseInt(originNumber);
		} catch (NumberFormatException e) {
			return "";
		}

		try {
			nMultiplier = Integer.parseInt(multiplier);
		} catch (NumberFormatException e) {
			return "";
		}

		return (new Integer(nOrigin * nMultiplier).toString());
	}

	public static String divideString(String originNumber, String divisor) {
		int nOrigin = 0;
		int nDivisor = 0;
		if ((originNumber == null || originNumber.equals(""))
				&& (divisor == null || divisor.equals("") || divisor
						.equals("0"))) {
			return "";
		}

		try {
			nOrigin = Integer.parseInt(originNumber);
		} catch (NumberFormatException e) {
			return "";
		}

		try {
			nDivisor = Integer.parseInt(divisor);
		} catch (NumberFormatException e) {
			return "";
		}

		return (new Integer(nOrigin / nDivisor).toString());
	}

	/* add by zhaopu 2003-07-21 将页面的请求以map格式放到scoper中 */

	public static List getSubstringList(String str, String token) {
		ArrayList substringList = new ArrayList();

		while (str.length() > 0) {
			int i = str.indexOf(token);
			String str1 = str.substring(0, i);
			substringList.add(str1);

			str = str.substring(i + 1, str.length());
		}

		return substringList;
	}

	public static List getPartString(String str, String token) {
		List substringList = null;
		int index = str.indexOf(token);
		if (index != -1) {
			substringList = new ArrayList();
			substringList.add(str.substring(0, index));
			substringList.add(str.substring(index + 1, str.length()));
		}
		return substringList;
	}

	// 将二维数组转换成MAP
	public static HashMap convertArrayToMap(String flagArray[][]) {
		HashMap flagHashMap = new HashMap();
		for (int i = 0; i < flagArray.length; i++) {
			flagHashMap.put(flagArray[i][0], flagArray[i][1]);
		}
		return (flagHashMap);
	}

	// 将字符串按指定的分隔符转换成字符串数组
	// zhanglf, 2003-09-04
	public static String[] strToArray(String str, String separator) {
		if (str == null) {
			return null;
		}
		int index = 0;
		int index2 = 0;
		index2 = str.indexOf(separator);
		List list = new ArrayList();
		String temp = "";
		while (index2 != -1) {
			temp = str.substring(index, index2);
			// System.out.println("temp :" + temp);
			list.add(temp);
			index = index2 + 1;
			index2 = str.indexOf(separator, index);
			if (index2 == -1) {
				temp = str.substring(index);
				// System.out.println("temp2 :" + temp);
				list.add(temp);
			}
		}
		int size = list.size();
		String[] arrStr = new String[size];
		for (int i = 0; i < size; i++) {
			arrStr[i] = (String) list.get(i);
		}
		// ystem.out.println("list.size :" + list.size());

		return arrStr;
	}

	/**
	 * 提供精确的加法运算
	 * 
	 * @param v1
	 *            被加数
	 * @param v2
	 *            加数
	 * @return 两个参数的和 add by dym on 2006-06-12
	 */
	public static double add(String v1, double v2) {
		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		return b1.add(b2).doubleValue();
	}

	// 两个数相乘
	public static String mul(String v1, double v2) {
		if (v1 == null || v1.trim().equals("")) {
			return "";
		}
		try {
			BigDecimal b1 = new BigDecimal(v1);
			BigDecimal b2 = new BigDecimal(Double.toString(v2));

			return String.valueOf(b1.multiply(b2).doubleValue());
		} catch (Exception ex) {
			return "";
		}
	}

	// 相除
	public static String div(String v1, double v2) {
		if (v1 == null || v1.trim().equals("")) {
			return "";
		}
		try {
			BigDecimal b1 = new BigDecimal(v1);
			BigDecimal b2 = new BigDecimal(Double.toString(v2));

			return String.valueOf(b1.divide(b2, 10, BigDecimal.ROUND_HALF_UP)
					.doubleValue());
		} catch (Exception ex) {
			return "";
		}
	}

	// 相除
	public static String div(String v1, String v2, int scale) {
		if (v1 == null || v1.trim().equals("")) {
			return "";
		}

		BigDecimal b1 = new BigDecimal(v1);
		BigDecimal b2 = new BigDecimal(v2);

		return String.valueOf(b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP)
				.doubleValue());
	}

	/**
	 * 提供精确的小数位四舍五入处理。
	 * 
	 * @param v
	 *            需要四舍五入的数字
	 * @param scale
	 *            小数点后保留几位
	 * @return 四舍五入后的结果
	 */
	public static double round(double v, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException(
					"The scale must be a positive integer or zero");
		}

		BigDecimal b = new BigDecimal(Double.toString(v));
		BigDecimal one = new BigDecimal("1");

		return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	public static String replace(String strSource, String strFrom, String strTo) {
		if (strFrom == null || strFrom.equals("")) {
			return strSource;
		}
		String strDest = "";
		int intFromLen = strFrom.length();
		int intPos;

		while ((intPos = strSource.indexOf(strFrom)) != -1) {
			strDest = strDest + strSource.substring(0, intPos);
			strDest = strDest + strTo;
			strSource = strSource.substring(intPos + intFromLen);
		}
		strDest = strDest + strSource;

		return strDest;
	}

	public static String getStackTraceText(Exception e) {
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			e.printStackTrace(new PrintStream(baos));
			byte[] buff = baos.toByteArray();
			baos.close();
			return new String(buff);
		} catch (Exception ex) {
			return "";
		}
	}

	public static String replaceIgnoreCase(String strSource, String strFrom,
			String strTo) {
		if (strFrom == null || strFrom.equals("")) {
			return strSource;
		}
		String strDest = "";
		int intFromLen = strFrom.length();
		int intPos;

		String tmpStrSource = strSource.toLowerCase();
		while ((intPos = tmpStrSource.indexOf(strFrom.toLowerCase())) != -1) {
			strDest = strDest + strSource.substring(0, intPos);
			strDest = strDest + strTo;
			strSource = strSource.substring(intPos + intFromLen);
			tmpStrSource = strSource.toLowerCase();
		}
		strDest = strDest + strSource;

		return strDest;
	}

	public static Map DTO2Map(Object dto) {
		HashMap result = new HashMap();
		Class dtoClass = dto.getClass();
		Method methods[] = dtoClass.getMethods();
		for (int i = 0; i < methods.length; i++) {
			Method method = methods[i];
			if (method.getName().substring(0, 3).equals("get")
					&& method.getParameterTypes().length == 0
					&& !method.getName().equals("getClass")) {
				String key = method.getName().substring(3, 4).toLowerCase()
						+ method.getName().substring(4);
				Object value = null;
				try {
					value = method.invoke(dto, new Object[0]);
				} catch (Exception e) {
				}
				if (value != null) {
					result.put(key, value);
				}
			}
		}
		return result;
	}

	public static Object Map2DTO(Map map, Object dto) {
		Class dtoClass = dto.getClass();
		Method methods[] = dtoClass.getMethods();
		for (int i = 0; i < methods.length; i++) {
			Method method = methods[i];
			if (method.getName().substring(0, 3).equals("set")
					&& method.getParameterTypes().length != 0
					&& !method.getName().equals("setClass")
					&& !method.getName().equals("setRiderDetail11")) {
				String key = method.getName().substring(3, 4).toLowerCase()
						+ method.getName().substring(4);
				String value = null;
				try {
					value = (String) map.get(key);
				} catch (Exception e) {
				}
				if (value != null) {
					invokeSetMethod(key, value, dto);
				}
			}
		}
		return dto;
	}

	public static String formatDouble(double num) {
		String str = num + "";
		return str.substring(
				0,
				str.indexOf(".")
						+ (str.length() - str.indexOf(".") >= 3 ? 3 : str
								.length() - str.indexOf(".")));
	}

	public static Object cloneObject(Object obj) {
		try {
			java.io.ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(obj);
			oos.flush();
			byte buff[] = baos.toByteArray();
			oos.close();
			baos.close();
			java.io.ByteArrayInputStream bais = new ByteArrayInputStream(buff);
			ObjectInputStream ois = new ObjectInputStream(bais);
			Object cloneObj = ois.readObject();
			ois.close();
			bais.close();
			return cloneObj;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public static List copyObject(List fromList, Class toClass) {
		List toList = new ArrayList();
		if (fromList != null && fromList.size() > 0) {
			Iterator it = fromList.iterator();
			while (it.hasNext()) {
				toList.add(copyObject(it.next(), toClass));
			}
		}
		return toList;
	}

	public static Object copyObject(Object from, Class toClass) {
		try {
			Object to = toClass.newInstance();
			Class fromClass = from.getClass();
			Method methods[] = fromClass.getMethods();
			for (int i = 0; i < methods.length; i++) {
				Method method = methods[i];
				if (method.getName().substring(0, 3).equals("get")
						&& !method.getName().equals("getClass")
						&& method.getParameterTypes().length == 0) {
					Class parameterClasses[] = new Class[1];
					parameterClasses[0] = method.getReturnType();
					Object returnValue = method.invoke(from, new Object[0]);
					Object parameters[] = new Object[1];
					parameters[0] = returnValue;
					try {
						Method toMethod = toClass.getMethod("set"
								+ method.getName().substring(3),
								parameterClasses);
						toMethod.invoke(to, parameters);
					} catch (Exception e) {
						continue;
					}
				}
			}
			return to;
		} catch (Exception e) {
			return null;
		}
	}

	public static Object copyObject(Object from, Object to) {
		try {
			Class fromClass = from.getClass();
			Method methods[] = fromClass.getMethods();
			for (int i = 0; i < methods.length; i++) {
				Method method = methods[i];
				if (method.getName().substring(0, 3).equals("get")
						&& !method.getName().equals("getClass")
						&& method.getParameterTypes().length == 0) {
					Class parameterClasses[] = new Class[1];
					parameterClasses[0] = method.getReturnType();
					Object returnValue = method.invoke(from, new Object[0]);
					Object parameters[] = new Object[1];
					parameters[0] = returnValue;
					try {
						Method toMethod = to.getClass().getMethod(
								"set" + method.getName().substring(3),
								parameterClasses);
						toMethod.invoke(to, parameters);
					} catch (Exception e) {
						continue;
					}
				}
			}
			return to;
		} catch (Exception e) {
			return null;
		}

	}

	/**
	 * 转换日期格式
	 */
	public static String convertDateFormat(String strDate, int days) {
		if (strDate == null || strDate.length() < 10) {
			return "";
		}
		int year = Integer.parseInt(strDate.substring(0, 4));
		int month = Integer.parseInt(strDate.substring(5, 7));
		int day = Integer.parseInt(strDate.substring(8, 10));

		Calendar cld = Calendar.getInstance();
		cld.set(year, month - 1, day);
		if (days != -1) {
			cld.add(Calendar.DATE, days);
		}

		String yy = new Integer(cld.get(Calendar.YEAR)).toString();
		String mm = new Integer(cld.get(Calendar.MONTH) + 1).toString();
		String dd = new Integer(cld.get(Calendar.DATE)).toString();

		if (mm.length() < 2)
			mm = "0" + mm;
		if (dd.length() < 2)
			dd = "0" + dd;

		if (days != -1) {
			return yy + "年" + mm + "月" + dd + "日";
		} else {
			return yy + mm + dd;
		}
	}

	public static String convertSimpleDateFormat(String strDate) {
		if (strDate == null || strDate.length() < 10) {
			return "";
		}
		int year = Integer.parseInt(strDate.substring(0, 4));
		int month = Integer.parseInt(strDate.substring(5, 7));
		int day = Integer.parseInt(strDate.substring(8, 10));

		Calendar cld = Calendar.getInstance();
		cld.set(year, month - 1, day);

		String yy = new Integer(cld.get(Calendar.YEAR)).toString();
		String mm = new Integer(cld.get(Calendar.MONTH) + 1).toString();
		String dd = new Integer(cld.get(Calendar.DATE)).toString();

		if (mm.length() < 2)
			mm = "0" + mm;
		if (dd.length() < 2)
			dd = "0" + dd;

		return yy + mm + dd;
	}

	private static String toChinese(String sStr, String sFour, int i,
			boolean bPre) {
		String sStruct = "";// 回传结果
		for (int j = 0; j < 4; j++) {
			if (sFour.charAt(j) != '0')// 处理每一位数值时,在前面是否需要加“零”
			{
				if (j == 0)// 处理千位
				{
					if (!bPre) {
						sStruct = sStruct + '0';
					}
					sStruct = sStruct + sFour.charAt(j);
				} else// 处理百、十、个位
				{
					if (sFour.charAt(j - 1) == '0') {
						sStruct = sStruct + '0';
					}
					sStruct = sStruct + sFour.charAt(j);
				}

				switch (j)// 单独处理“角”和“分”
				{
				case 0: {
					if (i == 3) {
						sStruct = sStruct + '角';
					} else {
						sStruct = sStruct + '仟';
					}
					break;
				}
				case 1: {
					if (i == 3) {
						sStruct = sStruct + '分';
					} else {
						sStruct = sStruct + '佰';
					}
					break;
				}
				case 2: {
					sStruct = sStruct + '拾';
					break;
				}
				case 3: {
					if (!sStruct.equals("")) {
						switch (i)// 处理单位
						{
						case 0: {
							sStruct = sStruct + "亿";
							break;
						}
						case 1: {
							sStruct = sStruct + "万";
							break;
						}
						case 2: {
							sStruct = sStruct + "元";
							break;
						}
						}
					}
				}
				}
			} else// 当个位为零时,处理单位
			{
				if (!sStruct.equals("") && j == 3) {
					switch (i) {
					case 0: {
						sStruct = sStruct + "亿";
						break;
					}
					case 1: {
						sStruct = sStruct + "万";
						break;
					}
					}
				}
				if (i == 2 && j == 3
						&& (!sStr.equals("") || !sStruct.equals("")))// 是否加“元”字
				{
					sStruct = sStruct + "元";
				}
			}
		}
		return sStruct;
	}

	// 参数digit最多有两位小数,本方法最大支持金额999999999999.99
	public static String toUpper(double digit) {
		// 将数据格式化为四位小数
		DecimalFormat df = new DecimalFormat("#.0000");
		StringBuffer sbDigit = new StringBuffer(df.format(digit));
		sbDigit.replace(sbDigit.length() - 2, sbDigit.length(), "00");
		String sDigit = "";// 将double转化为string
		sDigit = sbDigit.toString();
		sDigit = sDigit.substring(0, sDigit.length() - 5)
				+ sDigit.substring(sDigit.length() - 4);// 去除小数点

		// 将字符串补齐16位,利于分组
		// sDigit = sDigit + "00";
		if (sDigit.length() > 16) {
			return "款项过大!";
		}

		if (sDigit.length() < 16) {
			int iLength = 16 - sDigit.length();
			for (int i = 0; i < iLength; i++) {
				sDigit = "0" + sDigit;
			}
		}
		if (sDigit.equals("0000000000000000")) {
			return "零元整";
		}
		String sChinese = sDigit;
		String sFour = "";// 每四位构造一个string
		boolean bPreStr = true;// 前一个string是否构造成功
		sDigit = "";// 总字符串
		// 将字符串分为四组,每一组单独处理,都处理完后串接
		for (int i = 0; i < 4; i++) {
			sFour = toChinese(sDigit, sChinese.substring(i * 4, i * 4 + 4), i,
					bPreStr);
			if (sFour.length() == 0 || sFour.length() == 1) {
				bPreStr = false;
			} else if (sFour.charAt(sFour.length() - 2) < '0'
					|| sFour.charAt(sFour.length() - 2) > '9') {
				bPreStr = false;
			} else {
				bPreStr = true;
			}
			sDigit = sDigit + sFour;
		}
		// 去掉字符串最前面的‘0’
		for (;;) {
			if (sDigit.charAt(0) == '0') {
				sDigit = sDigit.substring(1);
			} else {
				break;
			}
		}

		sChinese = "";
		for (int i = 0; i < sDigit.length(); i++) {
			if (sDigit.charAt(i) >= '0' && sDigit.charAt(i) <= '9') {
				switch (sDigit.charAt(i)) {
				case '1': {
					sChinese = sChinese + "壹";
					break;
				}
				case '2': {
					sChinese = sChinese + "贰";
					break;
				}
				case '3': {
					sChinese = sChinese + "叁";
					break;
				}
				case '4': {
					sChinese = sChinese + "肆";
					break;
				}
				case '5': {
					sChinese = sChinese + "伍";
					break;
				}
				case '6': {
					sChinese = sChinese + "陆";
					break;
				}
				case '7': {
					sChinese = sChinese + "柒";
					break;
				}
				case '8': {
					sChinese = sChinese + "捌";
					break;
				}
				case '9': {
					sChinese = sChinese + "玖";
					break;
				}
				case '0': {
					sChinese = sChinese + "零";
					break;
				}
				}
			} else {
				sChinese = sChinese + sDigit.charAt(i);
			}
		}

		if (!sDigit.endsWith("分"))// 有"分"不加"整"
		{
			sChinese = sChinese + "整";
		}

		return sChinese;
	}

	public static List splitByChinese(String value) {
		List result = new ArrayList();
		if (value == null) {
			return result;
		}
		String buff = "";
		for (int i = 0; i < value.length(); i++) {
			if (value.substring(i, i + 1).getBytes().length == 1) {
				buff = buff + value.substring(i, i + 1);
			} else {
				if (buff != "") {
					result.add(buff);
				}
				result.add(value.substring(i, i + 1));
				buff = "";
			}
		}
		if (buff != "") {
			result.add(buff);
		}
		return result;
	}

	public static String getScript(Object obj) {
		return getScript(obj, "");
	}

	public static String getScript(Object obj, String prefix) {
		List classFilter = new ArrayList();
		classFilter.add(String.class);
		classFilter.add(Integer.class);
		classFilter.add(Double.class);
		classFilter.add(Float.class);
		classFilter.add(Boolean.class);
		classFilter.add(java.sql.Timestamp.class);

		if (obj == null)
			return "";
		// String ret = "";
		StringBuffer ret = new StringBuffer("");
		Class c = obj.getClass();
		Method methods[] = c.getMethods();
		for (int i = 0; i < methods.length; i++) {
			if (methods[i].getParameterTypes().length > 0
					|| !methods[i].getName().substring(0, 3).equals("get")) {
				continue;
			}
			String propertyName = methods[i].getName().substring(3, 4)
					.toLowerCase()
					+ methods[i].getName().substring(4);
			if (!propertyName.equals("script") && !propertyName.equals("class"))
				try {
					Object result = methods[i].invoke(obj, new Object[0]);
					if (classFilter.contains(result.getClass()))
						ret.append("try{setValue(document.all["" + prefix
								+ propertyName + ""],"" + result.toString()
								+ "");}catch(ex){}");
					else if (result.getClass().equals(ArrayList.class))
						for (int j = 0; j < ((List) result).size(); j++)
							ret.append(getScript(((List) result).get(j),
									propertyName + "[" + j + "]."));
					else
						ret.append(getScript(result, propertyName + "."));

				} catch (Exception e) {
				}
		}
		return ret.toString();

	}

	public static String getServletName(String url) {
		if (url.indexOf("/") < 0)
			return url;
		else
			return getServletName(url.substring(url.indexOf("/") + 1));
	}

	public static String getWebContentByURL(String urlString) {
		try {
			URL url = new URL(urlString);
			InputStream is = url.openStream();
			BufferedReader reader = new BufferedReader(
					new InputStreamReader(is));
			StringBuffer buff = new StringBuffer();
			while (true) {
				String line = reader.readLine();
				if (line == null)
					break;
				buff.append(line);
			}
			reader.close();
			is.close();
			return buff.toString();
		} catch (MalformedURLException ex) {
			return null;
		} catch (IOException ex) {
			return null;
		}
	}

	public static String getSubStr(String str1, String str2) {
		String returnStr = null;
		if (str1 == null || str1.length() == 0) {
			returnStr = "";
		} else if (str2 == null || str2.length() == 0) {
			returnStr = str1;
		} else if (str1.lastIndexOf(str2) == -1) {
			returnStr = str1;
		} else {
			returnStr = str1.substring(0, str1.lastIndexOf(str2));
		}
		return returnStr;
	}

	/**
	 * fuction:str1检查是否匹配字符串 param str2 匹配的字符串 return : 匹配到了 返回true 否则 false
	 * 
	 * @param str1
	 * @param str2
	 * @return
	 */
	public static boolean checkStr(String str1, String str2) {
		boolean bl = false;
		if (str1 == null)
			return false;
		if (str2 == null)
			return false;
		for (int i = 0; i < str1.length(); i++) {
			String s = str1.substring(i, i + 1);
			if (s.equals(str2)) {
				bl = true;
				break;
			}
		}
		return bl;
	}

	public static Date convertStringToDate(String date, String formatPattern) {
		SimpleDateFormat sdf = new SimpleDateFormat();
		if (formatPattern == null || formatPattern.equals("")) {
			formatPattern = "yyyy-MM-dd HH:mm:ss";
		}
		sdf.applyPattern(formatPattern);

		try {
			return sdf.parse(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}

	}

	public static final String QBchange(String QJstr) {
		String outStr = "";
		String Tstr = "";
		byte[] b = null;

		for (int i = 0; i < QJstr.length(); i++) {
			try {
				Tstr = QJstr.substring(i, i + 1);
				b = Tstr.getBytes("unicode");
			} catch (java.io.UnsupportedEncodingException e) {
				e.printStackTrace();
			}

			if (b[3] == -1) {
				b[2] = (byte) (b[2] + 32);
				b[3] = 0;
				try {
					outStr = outStr + new String(b, "unicode");
				} catch (java.io.UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			} else
				outStr = outStr + Tstr;
		}

		return outStr;
	}

	/**
	 * 去掉字符串内部的空格
	 * 
	 * @param targetValue
	 *            需要去除空格的字符串
	 * @return
	 */
	public static final String trimInnerSpace(String targetValue) {
		if (null == targetValue || "".equals(targetValue)) {
			return targetValue;
		} else {
			return targetValue.trim().replaceAll(" ", "");
		}
	}

	/**
	 * 将投保平台的证件类型转换成cif2标准证件类型
	 * 
	 * @param 投保平台的证件类型
	 * @return 标准证件类型
	 * @see 没有找到对应的类型就置为0(其他)
	 */
	public static final String convertCertificateType(String type) {
		return type == null ? null
				: (certificateTypeMap.get(type) == null ? "0"
						: (String) certificateTypeMap.get(type));
	}

	/**
	 * 判断是否境外旅行意外险产品
	 * 
	 * @param planCode
	 * @param productCode
	 * @return
	 */
	public static boolean isAbroadAccident(String planCode, String productCode) {
		return (("Y009".equals(planCode)) && ("00033".equals(productCode)
				|| "00034".equals(productCode) || "00035".equals(productCode)
				|| "00036".equals(productCode) || "00037".equals(productCode) || "00038"
					.equals(productCode)))
				|| (("Y064".equals(planCode)) && ("00708".equals(productCode)
						|| "00709".equals(productCode)
						|| "00710".equals(productCode)
						|| "00711".equals(productCode)
						|| "00712".equals(productCode) || "00713"
							.equals(productCode)));
	}

	private static final String[] EMAIL_APPENDIX = new String[] {
			".paic.com.cn", ".pingan.com.cn", ".pingan.com" };

	public static boolean isEmailEqual(String a, String b) {
		if (StringUtils.hasText(a) && StringUtils.hasText(b)) {
			a = a.toLowerCase();
			b = b.toLowerCase();
			for (int i = 0; i < EMAIL_APPENDIX.length; i++) {
				if (a.endsWith(EMAIL_APPENDIX[i])) {
					a = a.substring(0, a.indexOf(EMAIL_APPENDIX[i]));
				}
				if (b.endsWith(EMAIL_APPENDIX[i])) {
					b = b.substring(0, b.indexOf(EMAIL_APPENDIX[i]));
				}
			}
			return a.equals(b);
		}
		return false;
	}

	/**
	 * 比较两个双精度浮点数是否相等
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static boolean isDoubleNumberEqual(double a, double b) {
		if (Math.abs(a - b) < 0.00001) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 身份证18位转换为15位
	 * 
	 * @param icNo
	 * @return
	 */
	public static String IdentityCardNo18to15(String icNo) {
		if (icNo == null || "".equals(icNo.trim())) {
			return "";
		}
		String newIcNo = icNo.trim();
		if (newIcNo.length() != 18) {
			return icNo;
		} else {
			return newIcNo.substring(0, 6) + newIcNo.substring(8, 17);
		}
	}

	/**
	 * 厦门结案区间
	 * 
	 * @param type
	 * @return
	 */
	public static String getCaseName(String type) {
		return type == null ? "" : (caseMap.get(type) == null ? ""
				: (String) caseMap.get(type));
	}

	/**
	 * <p>
	 * 判断给定字符串是否为null或""
	 * 
	 * @param s
	 * @return true或false
	 */
	public static boolean isEmptyStr(String s) {
		if (s == null || s.trim().length() == 0) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * <p>
	 * 判断给定字符串是否为null或""
	 * 
	 * @param s
	 * @return 不为空返回true,否则false
	 */
	public static boolean isNotEmptyStr(String s) {
		return !isEmptyStr(s);
	}

	/**
	 * 计算两个日期的间隔年数
	 * 
	 * @author zsx
	 * @param smallDateStr
	 *            ,bigDateStr
	 * @return float year (小数部分没有四舍五入)
	 */
	public static double getYearBetweenTowDate(String smallDateStr,
			String bigDateStr) {
		double year = 0;
		if (CommonFunctions.isNotEmptyStr(smallDateStr)
				&& CommonFunctions.isNotEmptyStr(bigDateStr)) {
			try {
				java.util.Date smallDate = CommonFunctions
						.parseTime(smallDateStr);
				java.util.Date bigDate = CommonFunctions.parseTime(bigDateStr);

				int smallYear = smallDate.getYear() + 1900;
				int smallMonth = smallDate.getMonth() + 1;
				int smallDay = smallDate.getDate();

				int bigYear = bigDate.getYear() + 1900;
				int bigMonth = bigDate.getMonth() + 1;
				int bigDay = bigDate.getDate();

				year = (bigYear - smallYear) + (bigMonth - smallMonth) / 12.0
						+ (bigDay - smallDay) / 365.0;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return year;
	}

	/**
	 * zxs 2008-05-07 比较两日期大小,日期1大于等于日期2 返回1,小于返回-1,等于返回0 精确到时分秒
	 */
	public static int compareDates(String dateStr1, String dateStr2) {
		java.util.Date date1 = parseTime(dateStr1);
		java.util.Date date2 = parseTime(dateStr2);
		int result = date1.compareTo(date2);
		return result;
	}

	/**
	 * 将常用时间字符串转换为时间对象 zxs 2007-12-25 修改归并版本有两个parseTime方法问题
	 * 
	 * @param String
	 * @return java.util.Date
	 */
	public static java.util.Date parseTime(String date) {
		SimpleDateFormat df = new SimpleDateFormat();
		java.util.Date rtnDate = null;
		if (date == null || date.trim().equals("")
				|| date.trim().equals("null"))
			return rtnDate;
		try {
			date = date.trim();
			int length = date.length();
			if (date.indexOf("-") != -1) {
				if (length == 5) {
					if (date.indexOf("-") == length - 1) {// 2008-
						df.applyPattern("yyyy");
						date = date.substring(0, 4);
						rtnDate = df.parse(date);
					} else {
						df.applyPattern("yyyy-MM");// 2008-01
						rtnDate = df.parse(date);
					}
				} else if (length >= 6 && length <= 7) {// 2008-1 -- 2008-01
					df.applyPattern("yyyy-MM");
					rtnDate = df.parse(date);
				} else if (length >= 8 && length <= 9) {
					if (date.lastIndexOf("-") == length - 1) { // 2008-12-
						df.applyPattern("yyyy-MM");
						date = date.substring(0, length - 1);
						rtnDate = df.parse(date);
					} else {
						df.applyPattern("yyyy-MM-dd");// 2008-1-1 -- 2008-01-01
						rtnDate = df.parse(date);
					}
				} else if (length >= 10 && length <= 11) {
					if (date.indexOf(" ") > -1
							&& date.indexOf(" ") < length - 1) {
						df.applyPattern("yyyy-MM-dd HH");// 2008-1-1 1 --
															// 2008-1-1 11 中间有空格
						rtnDate = df.parse(date);
					} else {
						df.applyPattern("yyyy-MM-dd");// "2008-01-01"中间无空格
						rtnDate = df.parse(date);
					}
				} else if (length >= 12 && length <= 13) {
					if (date.indexOf(":") > -1
							&& date.indexOf(":") < length - 1) {
						df.applyPattern("yyyy-MM-dd HH:mm");// 2008-1-1 1:1 --
															// 2008-1-1 1:01
															// 中间有冒号
						rtnDate = df.parse(date);
					} else {
						df.applyPattern("yyyy-MM-dd HH");// 2008-01-01 01 中间有空格
						rtnDate = df.parse(date);
					}
				} else if (length >= 14 && length <= 16) {
					int lastIndex = date.lastIndexOf(":");
					if (date.indexOf(":") > -1 && lastIndex < length - 1
							&& date.indexOf(":") != lastIndex) {
						df.applyPattern("yyyy-MM-dd HH:mm:ss");// 2008-1-1 1:1:1
																// -- 2008-01-01
																// 1:1:1 中间有两个冒号
						if (lastIndex < length - 1 - 2) {
							date = date.substring(0, lastIndex + 3);
						}
						rtnDate = df.parse(date);
					} else if (date.indexOf(":") > -1 && lastIndex < length - 1
							&& date.indexOf(":") == lastIndex) {
						df.applyPattern("yyyy-MM-dd HH:mm");// 2008-01-01 1:1 --
															// 2008-01-01
															// 01:01中间只有一个冒号
						rtnDate = df.parse(date);
					} else if (date.indexOf(":") > -1
							&& lastIndex == length - 1
							&& date.indexOf(":") == lastIndex) {
						df.applyPattern("yyyy-MM-dd HH");// 2008-01-01 01:
															// 只有一个冒号在末尾
						date = date.substring(0, length - 1);
						rtnDate = df.parse(date);
					}
				} else if (length == 17) {
					int lastIndex = date.lastIndexOf(":");
					if (lastIndex < length - 1) {
						df.applyPattern("yyyy-MM-dd HH:mm:ss");// 2008-1-1 1:1:1
																// -- 2008-01-01
																// 1:1:1 中间有两个冒号
						if (lastIndex < length - 1 - 2) {
							date = date.substring(0, lastIndex + 3);
						}
						rtnDate = df.parse(date);
					} else if (lastIndex == length - 1) {
						df.applyPattern("yyyy-MM-dd HH:mm");// 2008-01-01 1:1 --
															// 2008-01-01
															// 01:01中间只有一个冒号
						date = date.substring(0, length - 1);
						rtnDate = df.parse(date);
					}
				} else if (length >= 18) {
					df.applyPattern("yyyy-MM-dd HH:mm:ss");// 2008-1-1 1:1:1 --
															// 2008-01-01
															// 01:01:01 有两个冒号
					int lastIndex = date.lastIndexOf(":");
					if (lastIndex < length - 1 - 2) {
						date = date.substring(0, lastIndex + 3);
					}
					rtnDate = df.parse(date);
				}
			} else if (length == 4) {
				df.applyPattern("yyyy");
				rtnDate = df.parse(date);
			} else if (length >= 5 && length <= 6) {
				df.applyPattern("yyyyMM");
				rtnDate = df.parse(date);
			} else if (length >= 7 && length <= 8) {
				df.applyPattern("yyyyMMdd");
				rtnDate = df.parse(date);
			} else if (length >= 9 && length <= 10) {
				df.applyPattern("yyyyMMddHH");
				rtnDate = df.parse(date);
			} else if (length >= 11 && length <= 12) {
				df.applyPattern("yyyyMMddHHmm");
				rtnDate = df.parse(date);
			} else if (length >= 13 && length <= 14) {
				df.applyPattern("yyyyMMddHHmmss");
				rtnDate = df.parse(date);
			} else if (length >= 15) {
				df.applyPattern("yyyyMMddHHmmss");
				date = date.substring(0, 14);
				rtnDate = df.parse(date);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return rtnDate;
	}

	public static int parseInt(String str) {
		int f = 0;
		try {
			if (str == null || str.trim().equals("")) {
				f = 0;
			} else {
				f = Integer.parseInt(str);
			}
		} catch (Exception ex) {
			f = 0;
		}
		return f;
	}

	/**
	 * 去掉字符串中的中文字符
	 * 
	 * @param str
	 * @return
	 */
	public static String deleteChainese(String str) {
		if (str == null || "null".equals(str.trim()) || "".equals(str.trim())) {
			return "";
		}
		String returnStr = str;
		try {
			String regEx = "[\u4e00-\u9fa5]";
			Pattern p = Pattern.compile(regEx);
			Matcher m = p.matcher(str);
			while (m.find()) {
				for (int i = 0; i <= m.groupCount(); i++) {
					returnStr = returnStr.replaceAll(m.group(i), "");
				}
			}

		} catch (Exception ex) {
			returnStr = str;
		}
		return returnStr.trim();
	}

	/**
	 * 去掉字符串中的[非]中文字符
	 * 
	 * @param str
	 * @return
	 */
	public static String deleteNotChinese(String str) {
		if (str == null || "null".equals(str.trim()) || "".equals(str.trim())) {
			return "";
		}
		String returnStr = str;
		try {
			returnStr = returnStr.replaceAll("[^\u4e00-\u9fa5]", "");

		} catch (Exception ex) {
			returnStr = str;
		}
		return returnStr.trim();
	}

	/**
	 * 返回单精度数值 added by wangxf 2005-12-20
	 * 
	 * @param str
	 *            String
	 * @return float
	 */
	public static float parseFloat(String str) {
		float f = 0;
		if (str != null && !"".equals(str)) {
			str = str.trim();
			try {
				f = Float.parseFloat(str);
			} catch (Exception ex) {
				f = 0;
			}
		}
		return f;
	}

	/**
	 * 取保险止期优化 wuxiangrong001 yyyy-mm-dd converted to yyyy-mm-dd 23:59:59
	 */
	public static String convertContractEndDate(String contractEndDate) {
		if (StringUtils.hasText(contractEndDate)) {
			return formatDate(parseDate(contractEndDate, "yyyy-MM-dd"))
					+ " 23:59:59";
		} else {
			return contractEndDate;
		}
	}

	public static String[] convertCurrencyCode(String currencyCode) {
		if ("01".equals(currencyCode)) {
			return new String[] { "RMB", "元" };
		} else if ("02".equals(currencyCode)) {
			return new String[] { "HKD", "元" };
		} else if ("03".equals(currencyCode)) {
			return new String[] { "USD", "元" };
		} else if ("04".equals(currencyCode)) {
			return new String[] { "GBP", "元" };
		} else if ("05".equals(currencyCode)) {
			return new String[] { "JPY", "元" };
		} else if ("06".equals(currencyCode)) {
			return new String[] { "DM", "元" };
		} else if ("07".equals(currencyCode)) {
			return new String[] { "SF", "元" };
		} else if ("08".equals(currencyCode)) {
			return new String[] { "FF", "元" };
		} else if ("09".equals(currencyCode)) {
			return new String[] { "SGD", "元" };
		} else if ("10".equals(currencyCode)) {
			return new String[] { "CAD", "元" };
		} else if ("11".equals(currencyCode)) {
			return new String[] { "NTD", "元" };
		} else if ("12".equals(currencyCode)) {
			return new String[] { "EUR", "元" };
		} else if ("13".equals(currencyCode)) {
			return new String[] { "AUD", "元" };
		} else if ("14".equals(currencyCode)) {
			return new String[] { "ITL", "元" };
		} else if ("15".equals(currencyCode)) {
			return new String[] { "NLG", "元" };
		} else if ("16".equals(currencyCode)) {
			return new String[] { "ATS", "元" };
		} else if ("17".equals(currencyCode)) {
			return new String[] { "BEF", "元" };
		} else if ("18".equals(currencyCode)) {
			return new String[] { "MOP", "元" };
		} else if ("19".equals(currencyCode)) {
			return new String[] { "NLG", "克朗" };
		} else if ("20".equals(currencyCode)) {
			return new String[] { "NOK", "克朗" };
		} else if ("21".equals(currencyCode)) {
			return new String[] { "SEK", "克朗" };
		} else if ("22".equals(currencyCode)) {
			return new String[] { "NZD", "元" };
		} else if ("23".equals(currencyCode)) {
			return new String[] { "COREA", "元" };
		} else {
			return new String[] { "RMB", "元" };
		}

	}

	// describe object
	public static Map describe(Object obj) {
		if (obj == null) {
			return Collections.EMPTY_MAP;
		} else {
			try {
				return BeanUtils.describe(obj);
			} catch (Exception e) {
				// ignore the exception;
				return Collections.EMPTY_MAP;
			}
		}
	}

	// remove the map that the null or empty value;
	public static void purifyMap(Map one) {
		if (one != null && !one.isEmpty()) {
			List uselessKeys = new ArrayList(one.size() / 2);
			for (Iterator it = one.keySet().iterator(); it.hasNext();) {
				Object key = it.next();
				Object value = one.get(key);
				// record useless keys;
				if (value == null) {
					uselessKeys.add(key);
				} else if ((value instanceof String)
						&& !StringUtils.hasText((String) value)) {
					uselessKeys.add(key);
				}
			}
			for (int i = 0; i < uselessKeys.size(); i++) {
				Object key = uselessKeys.get(i);
				one.remove(key);
			}
			// clear;
			uselessKeys.clear();
			uselessKeys = null;
		}
	}


	public static void main(String[] args) {
		int interval = 0;
		try {
			interval = getDays("2018-03-10", "2018-03-20");
			System.out.println(interval);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  

原文地址:https://www.cnblogs.com/qqyong123/p/8550822.html