dateUtil

package com.paic.lpms.common.util;

import java.security.InvalidParameterException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.paic.lpms.common.web.util.WebUtils;
import com.paic.pafa.app.integration.dao.PafaDAOException;
import com.paic.pafa.app.lwc.core.util.DevLog;


/**
 * 时间格式工具类
 *
 * @author yujiaxiang001
 * @version 1.0
 * @Date 2009-10-26
 */
public class DateUtil {

    //added by mazhao814, DateFormat Constants
    public static final String PATTERN_HOUR = "HH";

    public static final String PATTERN_MIN = "mm";

    public static final String PATTERN_MMddyyyy = "MM/dd/yyyy";

    public static final String PATTERN_yyyyMMddWithSlash = "yyyy/MM/dd";

    public static final String PATTERN_MMddyyyyHHmm = "MM/dd/yyyy HH:mm";

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

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

    public static final String PATTERN_yyyyMMdd = "yyyy-MM-dd";
    
    public static final String PATTERN_yyyyMMddWithoutBlank = "yyyyMMdd";

    public static final String PATTERN_MMddyyyyHHmmss = "MM/dd/yyyy HH:mm:ss";

    public static final String PATTERN_yyyyMMddHHmmssWithSlash = "yyyy/MM/dd HH:mm:ss";

    public static final String PATTERN_MMddyyyyHHmmSSS="yyyyMMddHHmmss.SSS";
    
    public static final String PATTERN_MMddyyyyHHmmSSSWithoutSeperator ="yyyyMMddHHmmssSSS";

    public static final String PATTERN_yyyyMMddHHmmssWithoutSeperator ="yyyyMMddHHmmss";

    public static final DateFormat FORMAT_MMddyyyy = new SimpleDateFormat(PATTERN_MMddyyyy);

    public static final DateFormat FORMAT_MMddyyyyHHmm = new SimpleDateFormat(PATTERN_MMddyyyyHHmm);

    public static final DateFormat FORMAT_MMddyyyyHHmmss = new SimpleDateFormat(PATTERN_MMddyyyyHHmmss);

    public static final DateFormat FORMAT_HOUR = new SimpleDateFormat(PATTERN_HOUR);

    public static final DateFormat FORMAT_MIN = new SimpleDateFormat(PATTERN_MIN);

    public static final DateFormat FORMAT_MMddyyyyHHmmSSS = new SimpleDateFormat(PATTERN_MMddyyyyHHmmSSS);

    public static final DateFormat FORMAT_yyyyMMddHHmmssWithoutSeperator = new SimpleDateFormat(PATTERN_yyyyMMddHHmmssWithoutSeperator);

    public static final DateFormat FORMAT_yyyyMMddWithoutBlank = new SimpleDateFormat(PATTERN_yyyyMMddWithoutBlank);

    public static final DateFormat FORMAT_yyyyMMddHHmm = new SimpleDateFormat(PATTERN_yyyyMMddHHmm);

    public static final DateFormat FORMAT_yyyyMMddHHmmss_DEFAULT = new SimpleDateFormat(DEFAULT_DATE_FORMAT);

    public static final DateFormat FORMAT_yyyyMMdd = new SimpleDateFormat(PATTERN_yyyyMMdd);

    public static final DateFormat FORMAT_yyyyMMddHHmmssWithSlash = new SimpleDateFormat(PATTERN_yyyyMMddHHmmssWithSlash);

    public static final DateFormat FORMAT_yyyyMMddWithSlash = new SimpleDateFormat(PATTERN_yyyyMMddWithSlash);

    private final static Log logger = LogFactory.getLog(DateUtil.class);
    private static Calendar calendar = Calendar.getInstance();


    public static void main(String[] args) {
        System.out.println(compare("2013-05-30", DateUtil.boundaryValue()));
    }

    public static String format(Date value) {
        return format(value, DEFAULT_DATE_FORMAT);
    }

    /**
     * 格式化日期
     *
     * @param value   value
     * @param pattern pattern
     * @return String
     */
    public static String getString(Date value, String pattern) {
        if (value == null) {
            return "";
        }
        SimpleDateFormat vFormat = new SimpleDateFormat(pattern);
        return vFormat.format(value);
    }

    /**
     * 将日期转化为字符串
     *
     * @param value  日期值
     * @param format 日期格式,缺省为"yyyy-MM-dd HH:mm:ss"
     * @return 转化后的字符串
     */
    public static String format(Date value, String format) {
        if (value == null)
            return "";

        if (format == null || format.length() == 0)
            format = DEFAULT_DATE_FORMAT;

        DateFormat df = new SimpleDateFormat(format);
        String result = df.format(value);

        if (result.length() != format.length()) {
            DevLog.debug(result + " is not equals date format " + format);
        }

        return result;
    }

    /**
     * 补全日期字符串,如"2007-12-10"+"23:59:59"变为"2007-12-10 23:59:59"
     *
     * @param value
     * @param defValue
     * @return
     */
    public static String fill(String value, String defValue) {
        if (value == null || value.length() == 0)
            return value;

        if (defValue == null || defValue.length() == 0)
            return value;

        int diff = DEFAULT_DATE_FORMAT.length() - value.length();
        if (diff <= 0) {
            return value;
        } else {
            if (defValue.length() >= diff) {
                return value + defValue.substring(defValue.length() - diff);
            } else {
                return value + defValue;
            }
        }
    }

    public static Date format(String value) {
        return format(value, DEFAULT_DATE_FORMAT);
    }

    /**
     * 解析字符串为日期对象
     *
     * @param value  日期字符串
     * @param format 日期格式,缺省为"yyyy-MM-dd HH:mm:ss"
     * @return Date 转化后的日期值
     */
    public static Date format(String value, String format) {
        if (value == null || value.length() == 0)
            return null;
        if (format == null || format.length() == 0)
            format = DEFAULT_DATE_FORMAT;

        if (format.length() > value.length()) {
            format = format.substring(0, value.length());
        }

        Date result = null;
        SimpleDateFormat df = null;
        if (format != null && format.length() > 0) {
            df = new SimpleDateFormat(format);
            try {
                result = df.parse(value);
            } catch (ParseException pe) {
                DevLog.debug(value + " parse fail with date format " + format);
                result = null;
            }
            if (result != null)
                return result;
        }

        return result;
    }

    /**
     * 解析字符串为日期对象
     *
     * @param value 日期字符串 "YYYY-MM-DD"
     * @return Date 转化后的日期值
     * @throws ParseException
     * @author EX-ZHENGLAI001
     */
    public static String formatStr(String value) throws ParseException {
        if (value == null || value.length() == 0)
            return null;
        Date date = new SimpleDateFormat("yyyy-MM-dd").parse(value);
        String dateStr = new SimpleDateFormat("MM/dd/yyyy").format(date);
        return dateStr;
    }

    /**
     * 解析字符串为日期对象
     *
     * @param value 日期字符串 "MM/DD/YYYY"
     * @return Date 转化后的日期值
     * @throws ParseException
     * @author EX-ZHENGLAI001
     */
    public static String formats(String value) throws ParseException {
        if (value == null || value.length() == 0)
            return null;
        Date date = new SimpleDateFormat("MM/dd/yyyy").parse(value);
        String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(date);
        return dateStr;
    }

    /**
     * Description 解析字符串为日期对象
     *
     * @param value 日期字符串
     * @return Date 转化后的日期值
     * @Copyright Copyright (c) 2012
     * @Company
     * @author EX-ZHENGLAI001
     * @CreateTime 2012-06-23 17:00:00
     */
    public static Date formatDate(String value) {
        if (value == null || value.length() == 0) {
            DevLog.debug(value + " parse fail with date value is null ");
            return null;
        }
        Date result = null;
        try {
            result = new Date(Timestamp.parse(value));
        } catch (Exception e) {
            DevLog.debug(value + " parse fail with date format ");
            logger.fatal(value + " parse fail with date format ", e);
        }
        return result;
    }

    /**
     * 给日期增加指定天数
     *
     * @param startDate 开始日期
     * @param day       增加天数
     * @return 增加天数后的日期
     */
    public static Date addDate(Date startDate, int day) {
        if (startDate == null)
            return null;
        calendar.setTime(startDate);
        calendar.add(Calendar.DATE, day);
        return calendar.getTime();

    }

    /**
     * 给时间增加指定小时
     *
     * @param startDate
     * @param hour
     * @return
     */
    public static Date addHour(Date startDate, int hour) {
        if (startDate == null)
            return null;
        calendar.setTime(startDate);
        calendar.add(Calendar.HOUR, hour);
        return calendar.getTime();
    }

    /**
     * 给时间增加指定分钟
     *
     * @param startDate
     * @param min
     * @return
     */
    public static Date addMin(Date startDate, int min) {
        if (startDate == null)
            return null;
        calendar.setTime(startDate);
        calendar.add(Calendar.MINUTE, min);
        return calendar.getTime();
    }

    /**
     * 获得当前日期的字符串,格式默认 YYYY-MM-DD
     *
     * @param datePattern
     * @return 根据输入格式要求的时间日期
     * @author ex_jinjie 2009/1/12
     */
    public static String getDateForFormat(String datePattern) {
        if (StringUtil.isNullOrBlank(datePattern)) {
            datePattern = "yyyy-MM-dd";
        }
        return new SimpleDateFormat(datePattern).format(Calendar.getInstance().getTime());
    }

    /**
     * Description:计算两个日期间的天数
     *
     * @param fromDate 起始日期
     * @param toDate   结束日期
     * @return Create Time:20081107
     * @throws ParseException
     * @author MIAOJIYONG001
     */
    public static long dateDiff(String fromDate, String toDate) throws ParseException {
        long days = 0;
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
        Date from = df.parse(fromDate);
        Date to = df.parse(toDate);
        days = (long) ((to.getTime() - from.getTime()) / (24 * 60 * 60 * 1000));
        return days;
    }

    public static long dateDiff(Date fromDate, Date toDate)
            throws ParseException {
        long days = 0;
        days = (long) ((toDate.getTime() - fromDate.getTime()) / (24 * 60 * 60 * 1000));
        return days;
    }

    /**
     * Description:计算两个日期间的天数 yyyy-MM-dd HH:mm:ss
     *
     * @param fromDate 起始日期
     * @param toDate   结束日期
     * @return Create Time:20081107
     * @throws ParseException
     * @author MIAOJIYONG001
     */
    public static long dateDiffAddHMS(String fromDate, String toDate) throws ParseException {
        long days = 0;
        Date from = FORMAT_yyyyMMddHHmmss_DEFAULT.parse(fromDate);
        Date to = FORMAT_yyyyMMddHHmmss_DEFAULT.parse(toDate);
        long tt = to.getTime() - from.getTime();
        int num = 24 * 60 * 60 * 1000;
        days = tt / num;
        if (tt % num > 0) {
            days++;
        }
        return days;
    }

    /**
     * 判断二个日期是否在间隔之内,如果在间隔之内,则返回真,否则则返回false 间隔时间以小时计;
     *
     * @param Date1
     * @param Date2
     * @param hours
     * @return
     */
    public static boolean judgeDate(Date Date1, Date Date2, int hours) {
        boolean res = false;
        if (Date1 == null || Date2 == null) {
            return res;
        }
        hours = hours * 60 * 60 * 1000;
        calendar.setTime(Date1);
        long date1InMill = calendar.getTimeInMillis();
        logger.debug("date1InMill:" + date1InMill);
        calendar.setTime(Date2);
        long date1InMil2 = calendar.getTimeInMillis();
        logger.debug("date1InMil2 - date1InMill:" + (date1InMil2 - date1InMill));
        if ((date1InMil2 - date1InMill) <= hours) {
            res = true;
        }

        return res;

    }

    /**
     * 判断二个日期是否在间隔之内,如果在间隔之内,则返回真,否则则返回false 间隔时间以小时计;
     *
     * @param Date1
     * @param Date2
     * @param hours
     * @return
     */
    public static boolean judgeDate(Date Date1, Date Date2, long hours) {
        boolean res = false;
        if (Date1 == null || Date2 == null) {
            return res;
        }
        hours = hours * 60 * 60 * 1000;
        calendar.setTime(Date1);
        long date1InMill = calendar.getTimeInMillis();
        logger.debug("date1InMill:" + date1InMill);
        calendar.setTime(Date2);
        long date1InMil2 = calendar.getTimeInMillis();
        logger.debug("date1InMil2 - date1InMill:" + (date1InMil2 - date1InMill));
        if ((date1InMil2 - date1InMill) <= hours) {
            res = true;
        }

        return res;

    }

    /**
     * 比较第一个时间是否比第二个时间新
     *
     * @param firstDate
     * @param secondDate
     * @param format     日期格式,缺省为"yyyy-MM-dd HH:mm:ss"
     * @return
     */
    public static boolean handlePairOfTime(Date firstDate, Date secondDate, String format) {
        if (format == null || format.length() == 0)
            format = DEFAULT_DATE_FORMAT;
        Format formatter = new SimpleDateFormat(format);
        String fDate = formatter.format(firstDate);
        String sDate = formatter.format(secondDate);
        Date newDate1 = null, newDate2 = null;
        try {
            newDate1 = (Date) formatter.parseObject(fDate);
            newDate2 = (Date) formatter.parseObject(sDate);
            if (newDate1.compareTo(newDate2) > 0) {
                return true;
            } else {
                return false;
            }
        } catch (ParseException fe) {
            DevLog.debug(fDate + " or " + sDate + " parse fail with date format.");
            return false;
        }
    }

    public static boolean handlePairOfDate(Date firstDate, Date secondDate) {
        Format formatter = new SimpleDateFormat("yyyy-MM-dd");
        String fDate = formatter.format(firstDate);
        String sDate = formatter.format(secondDate);
        Date newDate1 = null, newDate2 = null;
        try {
            newDate1 = (Date) formatter.parseObject(fDate);
            newDate2 = (Date) formatter.parseObject(sDate);
            if (newDate1.compareTo(newDate2) > 0) {
                return true;
            } else {
                return false;
            }
        } catch (ParseException fe) {
            DevLog.debug(fDate + " or " + sDate + " parse fail with date format.");
            return false;
        }
    }
    
    public static boolean handlePairOfDateToInsurance(Date firstDate, Date secondDate) {
        Format formatter = new SimpleDateFormat("yyyy-MM-dd");
        String fDate = formatter.format(firstDate);
        String sDate = formatter.format(secondDate);
        Date newDate1 = null, newDate2 = null;
        try {
            newDate1 = (Date) formatter.parseObject(fDate);
            newDate2 = (Date) formatter.parseObject(sDate);
            if (newDate1.compareTo(newDate2) >= 0) {
                return true;
            } else {
                return false;
            }
        } catch (ParseException fe) {
            DevLog.debug(fDate + " or " + sDate + " parse fail with date format.");
            return false;
        }
    }

    /**
     * 按指定的格式返回当前日期串
     *
     * @param pattern
     * @return
     */
    public static String getCustomDateStrs(String pattern) {
        Date calc = new Date();
        Format macher = new SimpleDateFormat(pattern);
        return macher.format(calc);
    }

    /**
     * 按指定的格式返日期串
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String getCustomDateStrs(Date date, String pattern) {
        Format macher = new SimpleDateFormat(pattern);
        return macher.format(date);
    }

    /**
     * @param args
     */
/*    public static void main(String[] args) {
        Date time = format("2005-12-01  16:59:59", null);
        String str = format(time, null);
        DevLog.debug(str);
    }*/

    /**
     * 获取今天是星期几
     *
     * @return
     */
    public static int getWeekday() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        return calendar.get(Calendar.DAY_OF_WEEK);
    }

    public static int getWeekday(String date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(format(date));
        return calendar.get(Calendar.DAY_OF_WEEK);
    }

    /**
     * 根据年月日得到一个合法日期,不合法逐年递增直至找到
     *
     * @param yearStr
     * @param monthStr
     * @param dayStr
     * @return
     */
    public static Date getValidBeginDateForYearCycle(String yearStr, String monthStr, String dayStr) {
        int day = Integer.parseInt(dayStr);
        Date today = getToday();
        Calendar calendar = Calendar.getInstance();
        Date validBeginDate = getEndDate(yearStr, monthStr, dayStr);
        calendar.setTime(validBeginDate);
        while (validBeginDate.before(today)) {
            validBeginDate = getEndDate(calendar.get(Calendar.YEAR) + 1, calendar
                    .get(Calendar.MONTH) + 1, day);
            calendar.setTime(validBeginDate);
        }
        while (calendar.get(Calendar.DATE) != day) {
            validBeginDate = getEndDate(calendar.get(Calendar.YEAR) + 1, calendar
                    .get(Calendar.MONTH) + 1, day);
            calendar.setTime(validBeginDate);
        }
        return validBeginDate;
    }

    /**
     * 根据年月日得到合法日期,如果该月无此日期,则取该月最后一天
     *
     * @param year
     * @param month
     * @param day
     * @return
     */
    public static Date getEndDate(int year, int month, int day) {
        return getEndDate(String.valueOf(year), String.valueOf(month), String.valueOf(day));
    }

    public static Date getEndDate(String yearStr, String monthStr, String dayStr) {
        int day = Integer.parseInt(dayStr);
        if (day < 0 || day > 31) {
            throw new InvalidParameterException("参数错误,设置提醒失败!");
        }
        Calendar calendar = Calendar.getInstance();
        Date beginDate = DateUtil.format(yearStr + "-" + monthStr + "-01");
        calendar.setTime(beginDate);
        int maxday = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DATE, maxday);
        if (calendar.get(Calendar.DATE) > day) {
            calendar.set(Calendar.DATE, day);
        }
        return calendar.getTime();
    }

    public static Date getToday() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 根据年月日得到一个合法日期,不合法逐月递增直至找到
     *
     * @param yearStr
     * @param monthStr
     * @param dayStr
     * @return
     */
    public static Date getValidBeginDateForMonthCycle(String yearStr, String monthStr, String dayStr) {
        int day = Integer.parseInt(dayStr);
        Date today = getToday();
        Calendar calendar = Calendar.getInstance();
        Date validBeginDate = getEndDate(yearStr, monthStr, dayStr);
        calendar.setTime(validBeginDate);
        while (validBeginDate.before(today)) {
            validBeginDate = getEndDate(calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH) + 2, day);
            calendar.setTime(validBeginDate);
        }
        while (calendar.get(Calendar.DATE) != day) {
            validBeginDate = getEndDate(calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH) + 2, day);
            calendar.setTime(validBeginDate);
        }
        return validBeginDate;
    }

    /**
     * 校验日期字符串是否合法
     *
     * @param date 日期字符串
     * @author EX-LIYONGSHENG001
     */
    public static boolean validateDate(String date) {
        int strYMDSP = 0;
        // 判断YYYYMMDD中的分隔符号 不是-报错
        if (!date.substring(4, 5).equals("-")) {
            return false;
        }
        String year = date.substring(0, 4);
        // 截去年份
        date = date.substring(5, date.length());
        // 获取月和日的分界
        for (int i = 0; i < date.length(); i++) {
            if (date.substring(i, i + 1).equals("-")) {
                strYMDSP = i;
                break;
            }
        }
        // 月日没有-分割报错
        if (strYMDSP < 1) {
            return false;
        }
        // 获取月
        String month = date.substring(0, strYMDSP);
        String day = date.substring(strYMDSP + 1, date.length());
        // 补零
        if (month.length() == 1) {
            month = "0" + month;
        }
        if (day.length() == 1) {
            day = "0" + day;
        }
        // 调用CheckyyyyMMdd函数判断yyyyMMdd格式的日期
        if (!checkyyyyMMdd(year + month + day)) {
            return false;
        }
        return true;
    }

    /**
     * 将不符合要求的字符串转换成前面补零的字符串
     *
     * @param date 源字符串
     * @author EX-LIYONGSHENG001
     */
    public static String leftPadDate(String date) {
        if (date.length() == 1) {
            return "0" + date;
        } else {
            return date;
        }
    }

    /**
     * 校验年月日是否合法
     */
    private static boolean checkyyyyMMdd(String dayString) {
        String digit = "0123456789";
        int[] dateLastList = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        // 不是8位
        if (dayString.length() != 8) {
            return false;
        }
        // 日期不是数字
        for (int i = 0; i < 8; i++) {
            if (digit.indexOf(dayString.charAt(i)) == -1) {
                return false;
            }
        }
        // 获取年月日
        int year = Integer.parseInt(dayString.substring(0, 4));
        int month = Integer.parseInt(dayString.substring(4, 6));
        int day = Integer.parseInt(dayString.substring(6, 8));
        // 年月日出界
        if (year > 2200 || year < 1900 || month > 12 || month < 1 || day > 31 || day < 1) {
            return false;
        }
        // 每月最后一天出界
        if (day > dateLastList[month - 1]) {
            return false;
        }
        // 判断闰年、平年的二月天数
        if (month == 2) {
            // 整百(如:1600, 2000)的闰年
            if ((year % 400) == 0) {
                if (day > 29) {
                    return false;
                }
            } else if ((year % 4) == 0 && (year % 100) != 0) {
                // 普通(1996, 2004)的闰年
                if (day > 29) {
                    return false;
                }
            } else {
                // 平年(如:1995,1997,2003,2005)
                if (day > 28) {
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 得到当天时间最大时刻,并将其转化为字符串
     */
    public static String getMaxTodayTimeString() {
        Date date = new Date();
        TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");
        FORMAT_yyyyMMddHHmmss_DEFAULT.setTimeZone(timeZoneChina);
        String result = FORMAT_yyyyMMddHHmmss_DEFAULT.format(date);
        if (null != result && result.length() > 0) {
            result = result.substring(0, 11);
        }
        result += "23:59:59";
        return result;
    }

    /**
     * 该方法用于获取系统时间-364的临界值
     */
    public static String getStartTime() {
        // String startTime="2010-08-21";
        String before = ""; // startTime-365
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date time = new Date();
        format.format(time);
        before = format.format(DateUtil.addDate(time, -364));
        return before;
    }

    /**
     * 该方法用于获取系统时间-365的临界值
     */
    public static String boundaryValue() {
        // String startTime="2010-08-21";
        String before = ""; // startTime-365
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date time = new Date();
        format.format(time);
        before = format.format(DateUtil.addDate(time, -365));
        // System.out.println("系统-365时间:"+before);
        return before;
    }

    /**
     * 给日期增加指定月数
     *
     * @param startDate 开始日期
     * @param month     增加月数
     * @return 增加月数后的日期
     */
    public static Date addMonth(Date startDate, int month) {
        if (startDate == null)
            return null;
        calendar.setTime(startDate);
        calendar.add(Calendar.MONTH, month);
        return calendar.getTime();

    }

    /**
     * 给日期增加指定天数
     *
     * @param day 增加天数
     * @return 增加天数后的日期的字符串表示形式
     */
    public static String boundaryValue(int day) {
        // String startTime="2010-08-21";
        String before = ""; // startTime-365
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date time = new Date();
        format.format(time);
        before = format.format(DateUtil.addDate(time, day));
        // System.out.println("系统-365时间:"+before);
        return before;
    }

    public static String boundaryValue(String nowDay, int day) {
        // String startTime="2010-08-21";
        String before = ""; // startTime-365
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date time = format(nowDay);
        format.format(time);
        before = format.format(DateUtil.addDate(time, day));
        // System.out.println("系统-365时间:"+before);
        return before;
    }

    /**
     * 给日期增加指定天数
     *
     * @param startTime 开始日期
     * @param day       增加天数
     * @return 增加天数后的日期的字符串表示形式
     */
    public static String boundaryValue(Date startTime, int day) {
        // String startTime="2010-08-21";
        String before = ""; // startTime-365
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // Date time = new Date();
        format.format(startTime);
        before = format.format(DateUtil.addDate(startTime, day));
        // System.out.println("系统-365时间:"+before);
        return before;
    }

    /**
     * 计算两个日期直接相差的天数
     *
     * @param endDate
     * @param startDate
     * @return
     */
    public static long getQuot(Date endDate, Date startDate) {
        long quot = 0;
        quot = endDate.getTime() - startDate.getTime();
        quot = quot / 1000 / 60 / 60 / 24;
        return quot;
    }

    /**
     * 计算两个日期直接相差的分钟数
     *
     * @param endDate
     * @param startDate
     * @return
     */
    public static long getQuotMin(Date endDate, Date startDate) {
        long quot = 0;
        quot = endDate.getTime() - startDate.getTime();
        quot = quot / 1000 / 60;
        return quot;
    }

    /**
     * 用于比较两个时间的前后
     *
     * @param time1 输入的开始时间,time2当前时间-365
     * @return String 1: time1大于time2  2:表示 time2大于 time1
     * @throws PafaDAOException
     * @throws ParseException
     * @throws ParseException
     */
    public static String compare(String time1, String time2) {
        DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
        Date startTimes;
        String flag = "1";
        try {
            if (StrUtil.isEmpty(time1)) {
                flag = "2";
                return flag;
            }
            startTimes = dateformat.parse(time1);
            Date befores = dateformat.parse(time2);
            if (befores.getTime() < startTimes.getTime()) {
                flag = "1";
            } else {
                flag = "2";
            }
        } catch (ParseException e) {
            logger.fatal("", e);
        }
        return flag;
    }

    public static String compareFull(String time1, String time2) {
        Date startTimes;
        String flag = "1";
        try {
            if (StrUtil.isEmpty(time1)) {
                flag = "2";
                return flag;
            }
            startTimes = FORMAT_yyyyMMddHHmmss_DEFAULT.parse(time1);
            Date befores = FORMAT_yyyyMMddHHmmss_DEFAULT.parse(time2);
            if (befores.getTime() < startTimes.getTime()) {
                flag = "1";
            } else {
                flag = "2";
            }
        } catch (ParseException e) {
            logger.fatal("", e);
        }
        return flag;
    }

    /**
     * 万里通红包抽奖开始时间
     */
    private static Date _awardStartDate_test = null;//DateUtil.getEndDate(2013, 7, 18);


    /**
     * 万里通红包抽奖开始时间(第二波活动)
     */
    private static Date _awardStartDate_Second = null;//DateUtil.getEndDate(2013, 7, 18);
    /**
     * 抢红包活动 开始时间配置
     */
    private static Date _awardStartDate_redPacket = null;//DateUtil.getEndDate(2013, 7, 18);

    /**
     * 购爱星期三活动 开始时间配置
     */
    private static Date _shopLoveWedStartDate_Love = null;

    /**
     * 购爱星期三活动 结束时间配置
     */
    private static Date _shopLoveWedEndDate_Love = null;
    /**
     * 第二波活动默认开始时间为8月1日
     */
    private final static Date _awardStartDateSecond_default = DateUtil.getEndDate(2013, 8, 1);
    private static long time1 = 0l;
    private final static Date _awardStartDate = DateUtil.getEndDate(2013, 7, 18);
    /**
     * 抢红包第二波活动开始时间设置
     */
    private final static Date _redPacketAwardStartDate = DateUtil.getEndDate(2013, 8, 27);

    /**
     * 抢红包第二波活动结束时间设置
     */
    private final static Date _redPacketAwardEndDate = DateUtil.getEndDate(2013, 10, 5);

    /**
     * 购爱星期三活动开始时间设置
     */
    private final static Date _shopLoveWedStartDate = DateUtil.getEndDate(2013, 8, 3);

    /**
     * 购爱星期三活动结束时间设置
     */
    private final static Date _shopLoveWedEndDate = DateUtil.getEndDate(2013, 10, 10);

    /*第一波活动 开始时间配置*/
    public static Date getAwardStartDate() {
        /**10分钟更新一次配置*/
        if (_awardStartDate_test == null || ((System.currentTimeMillis() - time1) > 1000 * 60 * 10)) {
            String statdate = WebUtils.getListOfValue("RP", "startDate");
            if (!StrUtil.isEmpty(statdate)) {
                _awardStartDate_test = DateUtil.format(statdate);
            }
            time1 = System.currentTimeMillis();
        }
        if (_awardStartDate_test == null) {
            return _awardStartDate;
        } else {
            return _awardStartDate_test;
        }
    }

    /*第二波活动开始时间配置*/
    public static Date getAwardStartDateNew() {
        /**10分钟更新一次配置*/
        if (_awardStartDate_Second == null || ((System.currentTimeMillis() - time1) > 1000 * 60 * 10)) {
            String statdate = WebUtils.getListOfValue("RP", "startDateNew");
            if (!StrUtil.isEmpty(statdate)) {
                _awardStartDate_Second = DateUtil.format(statdate);
            }
            time1 = System.currentTimeMillis();
        }
        if (_awardStartDate_Second == null) {
            return _awardStartDateSecond_default;
        } else {
            return _awardStartDate_Second;
        }
    }

    /*抢红包活动 开始时间配置*/
    public static Date getRedPacketAwardStartDate() {
        /**10分钟更新一次配置*/
        if (_awardStartDate_redPacket == null || ((System.currentTimeMillis() - time1) > 1000 * 60 * 10)) {
            String statdate = WebUtils.getListOfValue("RP", "startRedPacketDate");
            if (!StrUtil.isEmpty(statdate)) {
                _awardStartDate_redPacket = DateUtil.format(statdate);
            }
            time1 = System.currentTimeMillis();
        }
        if (_awardStartDate_redPacket == null) {
            return _redPacketAwardStartDate;
        } else {
            return _awardStartDate_redPacket;
        }
    }

    /*抢红包活动 结束时间配置*/
    public static Date getRedPacketAwardEndDate() {
        /**10分钟更新一次配置*/
        if (_awardStartDate_redPacket == null || ((System.currentTimeMillis() - time1) > 1000 * 60 * 10)) {
            String statdate = WebUtils.getListOfValue("RP", "endRedPacketDate");
            if (!StrUtil.isEmpty(statdate)) {
                _awardStartDate_redPacket = DateUtil.format(statdate);
            }
            time1 = System.currentTimeMillis();
        }
        if (_awardStartDate_redPacket == null) {
            return _redPacketAwardEndDate;
        } else {
            return _awardStartDate_redPacket;
        }
    }

    /*购爱星期三活动 开始时间配置*/
    public static Date getShopLoveWedStartDate() {
        /**10分钟更新一次配置*/
        if (_shopLoveWedStartDate_Love == null || ((System.currentTimeMillis() - time1) > 1000 * 60 * 10)) {
            String statdate = WebUtils.getListOfValue("RP", "startShopLoveWedDate");
            if (!StrUtil.isEmpty(statdate)) {
                _shopLoveWedStartDate_Love = DateUtil.format(statdate);
            }
            time1 = System.currentTimeMillis();
        }
        if (_shopLoveWedStartDate_Love == null) {
            return _shopLoveWedStartDate;
        } else {
            return _shopLoveWedStartDate_Love;
        }
    }

    /*购爱星期三活动 结束时间配置*/
    public static Date getShopLoveWedEndDate() {
        /**10分钟更新一次配置*/
        if (_shopLoveWedEndDate_Love == null || ((System.currentTimeMillis() - time1) > 1000 * 60 * 10)) {
            String statdate = WebUtils.getListOfValue("RP", "endShopLoveWedDate");
            if (!StrUtil.isEmpty(statdate)) {
                _shopLoveWedEndDate_Love = DateUtil.format(statdate);
            }
            time1 = System.currentTimeMillis();
        }
        if (_shopLoveWedEndDate_Love == null) {
            return _shopLoveWedEndDate;
        } else {
            return _shopLoveWedEndDate_Love;
        }
    }

    /**
     * 获得当前日期的字符串,格式参数 YYYY年MM月DD日
     *
     * @return
     */
    public static String getDate(String datePattern) {
        return new SimpleDateFormat(datePattern).format(Calendar.getInstance().getTime());
    }

    /**
     * 获得当前日期的字符串,格式示例 YYYYMMDD
     *
     * @return
     */
    public static String getDate() {
        String datePattern = "yyyyMMdd";
        return new SimpleDateFormat(datePattern).format(Calendar.getInstance().getTime());
    }

    /**
     * 获取当前操作系统的时间
     *
     * @return 当前操作系统的时间
     */
    public static String getTime() {
        String timePattern = "HHmmss";
        return new SimpleDateFormat(timePattern).format(Calendar.getInstance().getTime());
    }
    
    /**
     * 将字符串解析为时间格式
     * @param date
     * @param df
     * @return
     * @throws ParseException
     */
    public static Date parse(String date, DateFormat df) throws ParseException {
        return df.parse(date);
    }
    
    /**
     * 将字符串解析为时间格式
     * @param date, 格式为'yyyy-MM-dd HH:mm:ss'
     * @return
     * @throws ParseException
     */
    public static Date parse(String date) throws ParseException {
        return FORMAT_yyyyMMddHHmmss_DEFAULT.parse(date);
    }
    /**
     * 获取每周1-7日期(周一为每周第一天日期格式为:yyyy-MM-dd)
     * @param value 周一至周日值为1-7
     * @return
     */
    public static String getDayOfWeek(int value){
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        switch (value) {
        case 1:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.MONDAY);
            break;
        case 2:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.TUESDAY);
            break;
        case 3:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
            break;
        case 4:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.THURSDAY);
            break;
        case 5:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.FRIDAY);
            break;
        case 6:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            break;
        default:
            calendar.set(calendar.DAY_OF_WEEK, Calendar.SUNDAY);
            break;
        }
        return FORMAT_yyyyMMdd.format(calendar.getTime());
    }
    /**
     * 获取该月第一天日期(格式:yyyy-MM-dd)
     * @return
     */
    public static String getFirstayOfMonth(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-01");
        return sdf.format(new Date());
    }

    /**
     * 得到N天后的日期
     * @param num
     * @return
     */
    public static String getDate(int num) {
        long time = System.currentTimeMillis() + (1000L * 60 * 60 * 24 * num);
        String pattern = "yyyy-MM-dd";
        Date date = new Date();
        if (time > 0) {
            date.setTime(time);
        }
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        return format.format(date);
    }
    
}

 

posted @ 2016-03-11 11:15  神玄晓  阅读(173)  评论(0编辑  收藏  举报