记录Util类

来源:互联网 发布:龙章贵事件知乎 编辑:程序博客网 时间:2024/06/08 06:01

MoneyUtil


  • 处理金额一定需要使用BigDecimal,数据库中存放以分为单位的数据,进行扣款的时候遇到四舍五入的问题,可以四舍五入之后将分之后的数据截断掉,例如设置count为0
public static BigDecimal multiply(BigDecimal v1, BigDecimal v2, int count) {        return v1.multiply(v2).divide(new BigDecimal(1), count,                BigDecimal.ROUND_HALF_UP);    }
import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.Locale;import org.apache.commons.lang.StringUtils;/** * 金额处理工具类 * * @author wangyf * @version $Id: MoneyUtil.java,v 0.1 2012-8-1 上午08:44:17 wangyf Exp $ */public class MoneyUtil {    /**     * 转化金额格式,以元为单位0.00元     *     * @param money     * @return     */    public static String getMoneyDesc(Long money) {        if (money == null) {            return "0.00";        }        Money costPriceM = new Money();        costPriceM.setCent(money);        return costPriceM.toString();    }    public static String multiply(String a, String b) {        if (a.isEmpty() || b.isEmpty()) {            return "0.00";        }        Money ret = new Money();        ret.setAmount(new BigDecimal(a).multiply(new BigDecimal(b)));        return ret.toString();    }    public static double add(double v1, double v2) {        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.add(b2).doubleValue();    }    public static BigDecimal add(BigDecimal v1, BigDecimal v2) {        return v1.add(v2);    }    public static double add(String v1, String v2) {        BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.add(b2).doubleValue();    }    public static double sub(double v1, double v2) {        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.subtract(b2).doubleValue();    }    public static BigDecimal sub(BigDecimal v1, BigDecimal v2) {        return v1.subtract(v2);    }    public static double sub(String v1, String v2) {        if (v1 == null || v1.equals("")) {            v1 = "0";        }        if (v2 == null || v2.equals("")) {            v2 = "0";        }        BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.subtract(b2).doubleValue();    }    public static double mul(double v1, double v2) {        BigDecimal b1 = new BigDecimal(Double.toString(v1));        BigDecimal b2 = new BigDecimal(Double.toString(v2));        return b1.multiply(b2).doubleValue();    }    public static double mul(String v1, String v2) {        BigDecimal b1 = new BigDecimal(v1);        BigDecimal b2 = new BigDecimal(v2);        return b1.multiply(b2).doubleValue();    }    public static Long mul(BigDecimal v1, Long v2) {        BigDecimal b2 = new BigDecimal(v2.toString());        return v1.multiply(b2).longValue();    }    public static Long mulToLong(Double v1, Long v2) {        BigDecimal b1 = new BigDecimal(v1 != null ? v1.toString() : "0");        BigDecimal b2 = new BigDecimal(v2 != null ? v2.toString() : "0");        return b1.multiply(b2).longValue();    }    public static BigDecimal multiply(BigDecimal v1, Long v2) {        BigDecimal b2 = new BigDecimal(v2.toString());        return v1.multiply(b2);    }    public static BigDecimal multiply(BigDecimal v1, BigDecimal v2) {        return v1.multiply(v2);    }    public static BigDecimal multiply(BigDecimal v1, BigDecimal v2, int count) {        return v1.multiply(v2).divide(new BigDecimal(1), count,                BigDecimal.ROUND_HALF_UP);    }    public static BigDecimal multiply(BigDecimal v1, double v2) {        BigDecimal b2 = new BigDecimal(v2);        return v1.multiply(b2);    }    public static BigDecimal multiply(BigDecimal v1, int v2) {        BigDecimal b2 = new BigDecimal(v2);        return v1.multiply(b2);    }    public static double div(double v1, double v2) {        return div(v1, v2, 2);    }    public static Long div(double v1, BigDecimal v2) {        BigDecimal b1 = new BigDecimal(String.valueOf(v1));        return b1.divide(v2, 2, 4).longValue();    }    public static double div(String v1, String v2) {        if (v1 == null || v1.equals("")) {            v1 = "0";        }        if (v2 == null || v2.equals("")) {            v2 = "0";        }        return div(Double.parseDouble(v1), Double.parseDouble(v2), 2);    }    public static BigDecimal div(Long v1, BigDecimal v2) {        if (v1 == null) {            v1 = 0l;        }        if (v2 == null) {            v2 = new BigDecimal("0");        }        return new BigDecimal(v1.toString()).divide(v2, 2, 4);    }    public static BigDecimal div(Double v1, BigDecimal v2) {        if (v1 == null) {            v1 = 0d;        }        if (v2 == null) {            v2 = new BigDecimal("0");        }        return new BigDecimal(v1.toString()).divide(v2, 2, 4);    }    public static double div(double v1, double v2, int scale) {        if (scale < 0) {            throw new IllegalArgumentException(                    "The scale must be a positive integer or zero");        } else {            BigDecimal b1 = new BigDecimal(Double.toString(v1));            BigDecimal b2 = new BigDecimal(Double.toString(v2));            return b1.divide(b2, scale, 4).doubleValue();        }    }    public static double div(String v1, String v2, int scale) {        if (scale < 0) {            throw new IllegalArgumentException(                    "The scale must be a positive integer or zero");        } else {            BigDecimal b1 = new BigDecimal(v1);            BigDecimal b2 = new BigDecimal(v2);            return b1.divide(b2, scale, 4).doubleValue();        }    }    public static double round(double v, int scale) {        if (scale < 0) {            throw new IllegalArgumentException(                    "The scale must be a positive integer or zero");        } else {            BigDecimal b = new BigDecimal(Double.toString(v));            BigDecimal one = new BigDecimal("1");            return b.divide(one, scale, 4).doubleValue();        }    }    public static double round(String v, int scale) {        if (scale < 0) {            throw new IllegalArgumentException(                    "The scale must be a positive integer or zero");        } else {            BigDecimal b = new BigDecimal(v);            BigDecimal one = new BigDecimal("1");            return b.divide(one, scale, 4).doubleValue();        }    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param intMoney     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(String strMoney) {        return getFormatMoney(strMoney, null);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param strMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(String strMoney, String formatStr) {        return getFormatMoney(strMoney, formatStr, Locale.US);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param strMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @param locale     *            使用哪国的数字格式,如美国的千分位来表示数字     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(String strMoney, String formatStr,            Locale locale) {        Double doubleMoney;        if (strMoney == null || strMoney.trim().equals("")) {            strMoney = "0";        }        try {            doubleMoney = Double.valueOf(strMoney);        } catch (Exception e) {            return strMoney;        }        return getFormatMoney(doubleMoney, formatStr, locale);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param intMoney     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(Integer intMoney) {        return getFormatMoney(intMoney, null);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param intMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(Integer intMoney, String formatStr) {        return getFormatMoney(intMoney, formatStr, Locale.US);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param intMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @param locale     *            使用哪国的数字格式,如美国的千分位来表示数字     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(Integer intMoney, String formatStr,            Locale locale) {        if (intMoney == null) {            intMoney = Integer.parseInt("0");        }        if (null == formatStr || formatStr.trim().equals("")) {            formatStr = "¥#,##0.00";        }        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(locale);// 设置使用美国数字格式(千分位)        df.applyPattern(formatStr);// 设置应用金额格式        return df.format(intMoney);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param doubleMoney     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(Double doubleMoney) {        return getFormatMoney(doubleMoney, null);    }    /**     * 转换成金钱的字符串,带格式     *     * @param doubleMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(Double doubleMoney, String formatStr) {        if (doubleMoney == null) {            doubleMoney = Double.valueOf(0);        }        return getFormatMoney(doubleMoney, formatStr, Locale.US);    }    /**     * 转换成金钱的字符串,带格式     *     * @param doubleMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @param locale     *            使用哪国的数字格式,如美国的千分位来表示数字     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(Double doubleMoney, String formatStr,            Locale locale) {        if (doubleMoney == null) {            doubleMoney = Double.valueOf(0);        }        if (null == formatStr || formatStr.trim().equals("")) {            formatStr = "¥#,##0.00";        }        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(locale);// 设置使用美国数字格式(千分位)        df.applyPattern(formatStr);// 设置应用金额格式        return df.format(doubleMoney);    }    /**     * 转换成金钱的字符串,带格式(两位小数,千分位)     *     * @param bigDecimalMoney     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(BigDecimal bigDecimalMoney) {        return getFormatMoney(bigDecimalMoney, null);    }    /**     * 转换成金钱的字符串,带格式     *     * @param bigDecimalMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @param locale     *            使用哪国的数字格式,如美国的千分位来表示数字     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(BigDecimal bigDecimalMoney,            String formatStr) {        return getFormatMoney(bigDecimalMoney, formatStr, Locale.US);    }    /**     * 转换成金钱的字符串,带格式     *     * @param bigDecimalMoney     * @param formatStr     *            格式(例如: ###.00 元),     *            #占位表示可空,0占位表示少了就补0占位,E占位表示使用科学计数法,格式中加入其它字符就直接显示出来     *            ,如在前面或者后面加个[元]字.更多的请参考DecimalFormat     * @param locale     *            使用哪国的数字格式,如美国的千分位来表示数字     * @return     * @create Dec 15, 2008 9:40:39 AM yuancong     * @history     */    public static String getFormatMoney(BigDecimal bigDecimalMoney,            String formatStr, Locale locale) {        if (bigDecimalMoney == null) {            bigDecimalMoney = BigDecimal.valueOf(0.00);        }        if (null == formatStr || formatStr.trim().equals("")) {            formatStr = "¥#,##0.00";        }        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(locale);// 设置使用美国数字格式(千分位)        df.applyPattern(formatStr);// 设置应用金额格式        return df.format(bigDecimalMoney);    }    /**     * 价格基金转换,除100,取整数     */    public static int getMoneyPoint(double amount1, double amount2) {        int point = 0;        if (amount1 + amount2 > 0.0) {            point = (int) ((amount1 + amount2) / 100);        }        return point;    }    public static int getMoneyPointGive(double amount1, double amount2,            double amount3) {        int point = 0;        if ((amount1 + amount2 - amount3) > 0.0) {            point = (int) ((amount1 + amount2 - amount3) / 100);        }        return point;    }    public static String getMoneyStr(Long cent) {        /*         * Money money = new Money(); money.setCent(cent); return         * money.toString();         */        return "";    }    /**     * 积分转换成价格,除100,取2位小数     */    public static double getPointToMoney(double amount1) {        double point = 0.0;        if (amount1 > 0.0) {            point = ((amount1) / 100);        }        return point;    }    /**     * 积分计算2数值相加整数结果     */    public static int integerAdd(double point1, double point2) {        int point = 0;        if ((point1 + point2) > 0.0) {            point = (int) (point1 + point2);        }        return point;    }    /**     * 积分计算2数值相乘整数结果     */    public static int integerMul(double point1, int point2) {        int point = 0;        String acount = "" + point1 * point2;        if ((point1 * point2) > 0.0) {            BigDecimal dd = new BigDecimal(acount).setScale(0,                    BigDecimal.ROUND_HALF_UP);            point = dd.intValue();        }        return point;    }    /**     * 字符转换成浮点     *     * @param money     * @return     */    public static double StringToDouble(String money) {        return Double.parseDouble(money) / 100;    }    /**     * 浮点金额显示     *     * @param money     * @return     */    public static double DoubleMoney(Double money) {        if (null == money) {            return 0;        }        return money / 100;    }    /*     * 自助缴费使用,金额/100     */    public static String getFormatMoneyByPay(Object money) {        if (money == null || "".equals(money)) {            money = "0";        }        Double temp = Double.parseDouble(money.toString()) / 100;        return getFormatMoney(temp.toString(), "#,##0.00");    }    /*     * 自助缴费使用,金额/100     */    public static String getFormatMoneyByPay2(Object money) {        if (money == null || "".equals(money)) {            money = "0";        }        Double temp = Double.parseDouble(money.toString()) * 100;        return getFormatMoney(temp.toString(), "#,##0.00");    }    /**     * 类目首页最近浏览商品     *     * @return     */    public static String getFormatMoneyCategory(Double money) {        String formatMoney = getFormatMoney(money, "#,##0.00");        String[] array = StringUtils.split(formatMoney, ".");        if (array[1].equals("00")) {            return getFormatMoney(money, "#,##0");        } else if (array[1].endsWith("0")) {            return getFormatMoney(money, "#,##0.0");        } else {            return formatMoney;        }    }    /**     * 类目首页最近浏览商品     *     * @return     */    public static String getFormatMoneyCategory(String money) {        try {            return getFormatMoneyCategory(Double.parseDouble(money));        } catch (Exception e) {            return "";        }    }    public static void main(String args[]) {        // System.out.println(mul(add(5D, 663.85000000000002D), 1.01D));        System.out.println(getFormatMoneyCategory(2.20));    }    /**     * 计算拍卖商品冻结买家保证金 固定比例     *     * @param bids     *            proportion以%为单位     * @return     */    public static double getAuctionBidsMargin(double bids, double proportion) {        try {            BigDecimal marginBig = new BigDecimal(""                    + (bids * proportion / 100)).setScale(0,                    BigDecimal.ROUND_HALF_UP);            int margin = marginBig.intValue();            if (margin <= 5) {                return 5;            }            return margin;        } catch (Exception e) {            return 5;        }    }    /**     * Long 类型转换成BigDecimal     *     * @param l     * @return     */    public static BigDecimal toStrBig(Long l) {        return new BigDecimal(l != null ? String.valueOf(l) : "0");    }    public static BigDecimal toStrBig(Double l) {        return new BigDecimal(l != null ? String.valueOf(l) : "0");    }    public static BigDecimal toStrBig(Integer l) {        return new BigDecimal(l != null ? String.valueOf(l) : "0");    }}

DateUtil

import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;public class DateUtil {    private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>();    private static final Object object = new Object();    /**     * 获取SimpleDateFormat     *     * @param pattern     *            日期格式     * @return SimpleDateFormat对象     * @throws RuntimeException     *             异常:非法日期格式     */    private static SimpleDateFormat getDateFormat(String pattern)            throws RuntimeException {        SimpleDateFormat dateFormat = threadLocal.get();        if (dateFormat == null) {            synchronized (object) {                dateFormat = new SimpleDateFormat(pattern);                dateFormat.setLenient(false);                threadLocal.set(dateFormat);            }        }        dateFormat.applyPattern(pattern);        return dateFormat;    }    /**     * 获取日期中的某数值。如获取月份     *     * @param date     *            日期     * @param dateType     *            日期格式     * @return 数值     */    private static int getInteger(Date date, int dateType) {        int num = 0;        Calendar calendar = Calendar.getInstance();        if (date != null) {            calendar.setTime(date);            num = calendar.get(dateType);        }        return num;    }    /**     * 增加日期中某类型的某数值。如增加日期     *     * @param date     *            日期字符串     * @param dateType     *            类型     * @param amount     *            数值     * @return 计算后日期字符串     */    private static String addInteger(String date, int dateType, int amount) {        String dateString = null;        DateStyle dateStyle = getDateStyle(date);        if (dateStyle != null) {            Date myDate = StringToDate(date, dateStyle);            myDate = addInteger(myDate, dateType, amount);            dateString = DateToString(myDate, dateStyle);        }        return dateString;    }    /**     * 增加日期中某类型的某数值。如增加日期     *     * @param date     *            日期     * @param dateType     *            类型     * @param amount     *            数值     * @return 计算后日期     */    private static Date addInteger(Date date, int dateType, int amount) {        Date myDate = null;        if (date != null) {            Calendar calendar = Calendar.getInstance();            calendar.setTime(date);            calendar.add(dateType, amount);            myDate = calendar.getTime();        }        return myDate;    }    /**     * 获取精确的日期     *     * @param timestamps     *            时间long集合     * @return 日期     */    private static Date getAccurateDate(List<Long> timestamps) {        Date date = null;        long timestamp = 0;        Map<Long, long[]> map = new HashMap<Long, long[]>();        List<Long> absoluteValues = new ArrayList<Long>();        if (timestamps != null && timestamps.size() > 0) {            if (timestamps.size() > 1) {                for (int i = 0; i < timestamps.size(); i++) {                    for (int j = i + 1; j < timestamps.size(); j++) {                        long absoluteValue = Math.abs(timestamps.get(i)                                - timestamps.get(j));                        absoluteValues.add(absoluteValue);                        long[] timestampTmp = { timestamps.get(i),                                timestamps.get(j) };                        map.put(absoluteValue, timestampTmp);                    }                }                // 有可能有相等的情况。如2012-11和2012-11-01。时间戳是相等的。此时minAbsoluteValue为0                // 因此不能将minAbsoluteValue取默认值0                long minAbsoluteValue = -1;                if (!absoluteValues.isEmpty()) {                    minAbsoluteValue = absoluteValues.get(0);                    for (int i = 1; i < absoluteValues.size(); i++) {                        if (minAbsoluteValue > absoluteValues.get(i)) {                            minAbsoluteValue = absoluteValues.get(i);                        }                    }                }                if (minAbsoluteValue != -1) {                    long[] timestampsLastTmp = map.get(minAbsoluteValue);                    long dateOne = timestampsLastTmp[0];                    long dateTwo = timestampsLastTmp[1];                    if (absoluteValues.size() > 1) {                        timestamp = Math.abs(dateOne) > Math.abs(dateTwo) ? dateOne                                : dateTwo;                    }                }            } else {                timestamp = timestamps.get(0);            }        }        if (timestamp != 0) {            date = new Date(timestamp);        }        return date;    }    /**     * 判断字符串是否为日期字符串     *     * @param date     *            日期字符串     * @return true or false     */    public static boolean isDate(String date) {        boolean isDate = false;        if (date != null) {            if (getDateStyle(date) != null) {                isDate = true;            }        }        return isDate;    }    /**     * 获取日期字符串的日期风格。失敗返回null。     *     * @param date     *            日期字符串     * @return 日期风格     */    public static DateStyle getDateStyle(String date) {        DateStyle dateStyle = null;        Map<Long, DateStyle> map = new HashMap<Long, DateStyle>();        List<Long> timestamps = new ArrayList<Long>();        for (DateStyle style : DateStyle.values()) {            if (style.isShowOnly()) {                continue;            }            Date dateTmp = null;            if (date != null) {                try {                    ParsePosition pos = new ParsePosition(0);                    dateTmp = getDateFormat(style.getValue()).parse(date, pos);                    if (pos.getIndex() != date.length()) {                        dateTmp = null;                    }                } catch (Exception e) {                }            }            if (dateTmp != null) {                timestamps.add(dateTmp.getTime());                map.put(dateTmp.getTime(), style);            }        }        Date accurateDate = getAccurateDate(timestamps);        if (accurateDate != null) {            dateStyle = map.get(accurateDate.getTime());        }        return dateStyle;    }    /**     * 将日期字符串转化为日期。失败返回null。     *     * @param date     *            日期字符串     * @return 日期     */    public static Date StringToDate(String date) {        DateStyle dateStyle = getDateStyle(date);        return StringToDate(date, dateStyle);    }    /**     * 将日期字符串转化为日期。失败返回null。     *     * @param date     *            日期字符串     * @param pattern     *            日期格式     * @return 日期     */    public static Date StringToDate(String date, String pattern) {        Date myDate = null;        if (date != null) {            try {                myDate = getDateFormat(pattern).parse(date);            } catch (Exception e) {            }        }        return myDate;    }    /**     * 将日期字符串转化为日期。失败返回null。     *     * @param date     *            日期字符串     * @param dateStyle     *            日期风格     * @return 日期     */    public static Date StringToDate(String date, DateStyle dateStyle) {        Date myDate = null;        if (dateStyle != null) {            myDate = StringToDate(date, dateStyle.getValue());        }        return myDate;    }    /**     * 将日期转化为日期字符串。失败返回null。     *     * @param date     *            日期     * @param pattern     *            日期格式     * @return 日期字符串     */    public static String DateToString(Date date, String pattern) {        String dateString = null;        if (date != null) {            try {                dateString = getDateFormat(pattern).format(date);            } catch (Exception e) {            }        }        return dateString;    }    /**     * 将日期转化为日期字符串。失败返回null。     *     * @param date     *            日期     * @param dateStyle     *            日期风格     * @return 日期字符串     */    public static String DateToString(Date date, DateStyle dateStyle) {        String dateString = null;        if (dateStyle != null) {            dateString = DateToString(date, dateStyle.getValue());        }        return dateString;    }    /**     * 将日期字符串转化为另一日期字符串。失败返回null。     *     * @param date     *            旧日期字符串     * @param newPattern     *            新日期格式     * @return 新日期字符串     */    public static String StringToString(String date, String newPattern) {        DateStyle oldDateStyle = getDateStyle(date);        return StringToString(date, oldDateStyle, newPattern);    }    /**     * 将日期字符串转化为另一日期字符串。失败返回null。     *     * @param date     *            旧日期字符串     * @param newDateStyle     *            新日期风格     * @return 新日期字符串     */    public static String StringToString(String date, DateStyle newDateStyle) {        DateStyle oldDateStyle = getDateStyle(date);        return StringToString(date, oldDateStyle, newDateStyle);    }    /**     * 将日期字符串转化为另一日期字符串。失败返回null。     *     * @param date     *            旧日期字符串     * @param olddPattern     *            旧日期格式     * @param newPattern     *            新日期格式     * @return 新日期字符串     */    public static String StringToString(String date, String olddPattern,            String newPattern) {        return DateToString(StringToDate(date, olddPattern), newPattern);    }    /**     * 将日期字符串转化为另一日期字符串。失败返回null。     *     * @param date     *            旧日期字符串     * @param olddDteStyle     *            旧日期风格     * @param newParttern     *            新日期格式     * @return 新日期字符串     */    public static String StringToString(String date, DateStyle olddDteStyle,            String newParttern) {        String dateString = null;        if (olddDteStyle != null) {            dateString = StringToString(date, olddDteStyle.getValue(),                    newParttern);        }        return dateString;    }    /**     * 将日期字符串转化为另一日期字符串。失败返回null。     *     * @param date     *            旧日期字符串     * @param olddPattern     *            旧日期格式     * @param newDateStyle     *            新日期风格     * @return 新日期字符串     */    public static String StringToString(String date, String olddPattern,            DateStyle newDateStyle) {        String dateString = null;        if (newDateStyle != null) {            dateString = StringToString(date, olddPattern,                    newDateStyle.getValue());        }        return dateString;    }    /**     * 将日期字符串转化为另一日期字符串。失败返回null。     *     * @param date     *            旧日期字符串     * @param olddDteStyle     *            旧日期风格     * @param newDateStyle     *            新日期风格     * @return 新日期字符串     */    public static String StringToString(String date, DateStyle olddDteStyle,            DateStyle newDateStyle) {        String dateString = null;        if (olddDteStyle != null && newDateStyle != null) {            dateString = StringToString(date, olddDteStyle.getValue(),                    newDateStyle.getValue());        }        return dateString;    }    /**     * 增加日期的年份。失败返回null。     *     * @param date     *            日期     * @param yearAmount     *            增加数量。可为负数     * @return 增加年份后的日期字符串     */    public static String addYear(String date, int yearAmount) {        return addInteger(date, Calendar.YEAR, yearAmount);    }    /**     * 增加日期的年份。失败返回null。     *     * @param date     *            日期     * @param yearAmount     *            增加数量。可为负数     * @return 增加年份后的日期     */    public static Date addYear(Date date, int yearAmount) {        return addInteger(date, Calendar.YEAR, yearAmount);    }    /**     * 增加日期的月份。失败返回null。     *     * @param date     *            日期     * @param monthAmount     *            增加数量。可为负数     * @return 增加月份后的日期字符串     */    public static String addMonth(String date, int monthAmount) {        return addInteger(date, Calendar.MONTH, monthAmount);    }    /**     * 增加日期的月份。失败返回null。     *     * @param date     *            日期     * @param monthAmount     *            增加数量。可为负数     * @return 增加月份后的日期     */    public static Date addMonth(Date date, int monthAmount) {        return addInteger(date, Calendar.MONTH, monthAmount);    }    /**     * 增加日期的天数。失败返回null。     *     * @param date     *            日期字符串     * @param dayAmount     *            增加数量。可为负数     * @return 增加天数后的日期字符串     */    public static String addDay(String date, int dayAmount) {        return addInteger(date, Calendar.DATE, dayAmount);    }    /**     * 增加日期的天数。失败返回null。     *     * @param date     *            日期     * @param dayAmount     *            增加数量。可为负数     * @return 增加天数后的日期     */    public static Date addDay(Date date, int dayAmount) {        return addInteger(date, Calendar.DATE, dayAmount);    }    /**     * 增加日期的小时。失败返回null。     *     * @param date     *            日期字符串     * @param hourAmount     *            增加数量。可为负数     * @return 增加小时后的日期字符串     */    public static String addHour(String date, int hourAmount) {        return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);    }    /**     * 增加日期的小时。失败返回null。     *     * @param date     *            日期     * @param hourAmount     *            增加数量。可为负数     * @return 增加小时后的日期     */    public static Date addHour(Date date, int hourAmount) {        return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);    }    /**     * 增加日期的分钟。失败返回null。     *     * @param date     *            日期字符串     * @param minuteAmount     *            增加数量。可为负数     * @return 增加分钟后的日期字符串     */    public static String addMinute(String date, int minuteAmount) {        return addInteger(date, Calendar.MINUTE, minuteAmount);    }    /**     * 增加日期的分钟。失败返回null。     *     * @param date     *            日期     * @param dayAmount     *            增加数量。可为负数     * @return 增加分钟后的日期     */    public static Date addMinute(Date date, int minuteAmount) {        return addInteger(date, Calendar.MINUTE, minuteAmount);    }    /**     * 增加日期的秒钟。失败返回null。     *     * @param date     *            日期字符串     * @param dayAmount     *            增加数量。可为负数     * @return 增加秒钟后的日期字符串     */    public static String addSecond(String date, int secondAmount) {        return addInteger(date, Calendar.SECOND, secondAmount);    }    /**     * 增加日期的秒钟。失败返回null。     *     * @param date     *            日期     * @param dayAmount     *            增加数量。可为负数     * @return 增加秒钟后的日期     */    public static Date addSecond(Date date, int secondAmount) {        return addInteger(date, Calendar.SECOND, secondAmount);    }    /**     * 获取日期的年份。失败返回0。     *     * @param date     *            日期字符串     * @return 年份     */    public static int getYear(String date) {        return getYear(StringToDate(date));    }    /**     * 获取日期的年份。失败返回0。     *     * @param date     *            日期     * @return 年份     */    public static int getYear(Date date) {        return getInteger(date, Calendar.YEAR);    }    /**     * 获取日期的月份。失败返回0。     *     * @param date     *            日期字符串     * @return 月份     */    public static int getMonth(String date) {        return getMonth(StringToDate(date));    }    /**     * 获取日期的月份。失败返回0。     *     * @param date     *            日期     * @return 月份     */    public static int getMonth(Date date) {        return getInteger(date, Calendar.MONTH) + 1;    }    /**     * 获取日期的天数。失败返回0。     *     * @param date     *            日期字符串     * @return 天     */    public static int getDay(String date) {        return getDay(StringToDate(date));    }    /**     * 获取日期的天数。失败返回0。     *     * @param date     *            日期     * @return 天     */    public static int getDay(Date date) {        return getInteger(date, Calendar.DATE);    }    /**     * 获取日期的小时。失败返回0。     *     * @param date     *            日期字符串     * @return 小时     */    public static int getHour(String date) {        return getHour(StringToDate(date));    }    /**     * 获取日期的小时。失败返回0。     *     * @param date     *            日期     * @return 小时     */    public static int getHour(Date date) {        return getInteger(date, Calendar.HOUR_OF_DAY);    }    /**     * 获取日期的分钟。失败返回0。     *     * @param date     *            日期字符串     * @return 分钟     */    public static int getMinute(String date) {        return getMinute(StringToDate(date));    }    /**     * 获取日期的分钟。失败返回0。     *     * @param date     *            日期     * @return 分钟     */    public static int getMinute(Date date) {        return getInteger(date, Calendar.MINUTE);    }    /**     * 获取日期的秒钟。失败返回0。     *     * @param date     *            日期字符串     * @return 秒钟     */    public static int getSecond(String date) {        return getSecond(StringToDate(date));    }    /**     * 获取日期的秒钟。失败返回0。     *     * @param date     *            日期     * @return 秒钟     */    public static int getSecond(Date date) {        return getInteger(date, Calendar.SECOND);    }    /**     * 获取日期 。默认yyyy-MM-dd格式。失败返回null。     *     * @param date     *            日期字符串     * @return 日期     */    public static String getDate(String date) {        return StringToString(date, DateStyle.YYYY_MM_DD);    }    /**     * 获取日期。默认yyyy-MM-dd格式。失败返回null。     *     * @param date     *            日期     * @return 日期     */    public static String getDate(Date date) {        return DateToString(date, DateStyle.YYYY_MM_DD);    }    /**     * 获取日期的时间。默认HH:mm:ss格式。失败返回null。     *     * @param date     *            日期字符串     * @return 时间     */    public static String getTime(String date) {        return StringToString(date, DateStyle.HH_MM_SS);    }    /**     * 获取日期的时间。默认HH:mm:ss格式。失败返回null。     *     * @param date     *            日期     * @return 时间     */    public static String getTime(Date date) {        return DateToString(date, DateStyle.HH_MM_SS);    }    /**     * 获取日期的星期。失败返回null。     *     * @param date     *            日期字符串     * @return 星期     */    public static Week getWeek(String date) {        Week week = null;        DateStyle dateStyle = getDateStyle(date);        if (dateStyle != null) {            Date myDate = StringToDate(date, dateStyle);            week = getWeek(myDate);        }        return week;    }    /**     * 获取日期的星期。失败返回null。     *     * @param date     *            日期     * @return 星期     */    public static Week getWeek(Date date) {        Week week = null;        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        int weekNumber = calendar.get(Calendar.DAY_OF_WEEK) - 1;        switch (weekNumber) {        case 0:            week = Week.SUNDAY;            break;        case 1:            week = Week.MONDAY;            break;        case 2:            week = Week.TUESDAY;            break;        case 3:            week = Week.WEDNESDAY;            break;        case 4:            week = Week.THURSDAY;            break;        case 5:            week = Week.FRIDAY;            break;        case 6:            week = Week.SATURDAY;            break;        }        return week;    }    /**     * 获取两个日期相差的天数     *     * @param date     *            日期字符串     * @param otherDate     *            另一个日期字符串     * @return 相差天数。如果失败则返回-1     */    public static int getIntervalDays(String date, String otherDate) {        return getIntervalDays(StringToDate(date), StringToDate(otherDate));    }    /**     * @param date     *            日期     * @param otherDate     *            另一个日期     * @return 相差天数。如果失败则返回-1     */    public static int getIntervalDays(Date date, Date otherDate) {        int num = -1;        Date dateTmp = DateUtil.StringToDate(DateUtil.getDate(date),                DateStyle.YYYY_MM_DD);        Date otherDateTmp = DateUtil.StringToDate(DateUtil.getDate(otherDate),                DateStyle.YYYY_MM_DD);        if (dateTmp != null && otherDateTmp != null) {            long time = Math.abs(dateTmp.getTime() - otherDateTmp.getTime());            num = (int) (time / (24 * 60 * 60 * 1000));        }        return num;    }    /**     * @param date     *            日期     * @param otherDate     *            另一个日期     * @return 相差天数(日期早的减去日期晚的可为负数)。如果失败则返回-1     */    public static int getIntervalDaysAbleNegative(Date date, Date otherDate) {        int num = -1;        Date dateTmp = DateUtil.StringToDate(DateUtil.getDate(date),                DateStyle.YYYY_MM_DD);        Date otherDateTmp = DateUtil.StringToDate(DateUtil.getDate(otherDate),                DateStyle.YYYY_MM_DD);        if (dateTmp != null && otherDateTmp != null) {            long time =dateTmp.getTime() - otherDateTmp.getTime();            num = (int) (time / (24 * 60 * 60 * 1000));        }        return num;    }}
0 0
原创粉丝点击