首页 > 代码库 > DateUtil

DateUtil

//有些地方需要修改 import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;  public class DateUtil {    private final static String[] CN_Digits = { "〇", "一", "二", "三", "四", "五",        "六", "七", "八", "九", "十" };public static final long daySpan = 24 * 60 * 60 * 1000;/**yyyy-MM-dd HH:mm:ss*/public static final String TIME_FORMAT_NORMAL = "yyyy-MM-dd HH:mm:ss";/**yyyy-MM-dd*/public static final String DATE_FORMAT_NORMAL = "yyyy-MM-dd";/**yyyy.MM.dd*/public static final String DATE_FORMAT_DOT = "yyyy.MM.dd";/**yyyyMMdd*/public static final String DATE_FORMAT_NO_MINUS = "yyyyMMdd";/**yyMMdd*/public static final String DATE_FORMAT_NO_MINUS_SHORT = "yyMMdd";/**yyyy-MM*/public static final String MONTH_FORMAT_NORMAL = "yyyy-MM";/**MM-dd*/public static final String MONTH_DAY_FORMAT = "MM-dd";/**yyyyMMdd*/public static final String DATE_FORMAT_SHORT = "yyyyMMdd";/**yyyyMM*/public static final String MONTH_FORMAT = "yyyyMM";/**yyyy.MM*/public static final String MONTH_FORMAT_DOT = "yyyy.MM";/**yyyyMMddHHmm*/public static final String DATE_FORMAT_MINUTE = "yyyyMMddHHmm";/**yyyyMMddHHmmss*/private static final String TIME_FORMAT_SHORT = "yyyyMMddHHmmss";/**MM/dd/yyyy HH:mm:ss**/public static final String MONTH_DAY_YEAR_HOUR_MINUTE  ="MM/dd/yyyy HH:mm:ss";  /** * 判断参数year、month、day能否组成一个合法的日期。 * * @param month *            月份,合法月份范围是 1-12 * @param day *            日数 * @param year *            年份,必须大于1900 * @return */public static boolean isDate(int month, int day, int year) {    if (year < 1900) {        return false;    }    if (month < 1 || month > 12) {        return false;    }    if (day < 1 || day > 31) {        return false;    }     // 判断年份是否为闰年    @SuppressWarnings("unused")    boolean leapYear = isLeapYear(year);    // 获得该年该月的最大日期    int maxD = getMaxDay(year, month);    if (day > maxD) {        return false;    }     return true;} /** * 给定一个年份和月份,可以得到该月的最大日期。 例如 2009年1月,最大日期为31。 * * @param year *            年份,必须大于1900 * @param month *            月份,合法月份范围是 1-12 * @return */public static int getMaxDay(int year, int month) {    if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {        return 30;    }    if (month == 2) {        if (isLeapYear(year)) {            return 29;        } else {            return 28;        }    }    return 31;} /** * 判断年份是否为闰年。 * * @param year *            年份,必须大于1900 * @return */public static boolean isLeapYear(int year) {    boolean leapYear = ((year % 400) == 0);    if (!leapYear) {        leapYear = ((year % 4) == 0) && ((year % 100) != 0);    }    return leapYear;}  public static String getCurrentStringTime(){    Date date=new Date();    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");    String formatDate=format.format(date);    return formatDate;} public static String getCurrentTimeSecond(){    Date date=new Date();    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    String formatDate=format.format(date);    return formatDate;}/** * yyyy-MM-dd HH:mm:ss格式串转换为日期 * @param yyyy-MM-dd HH:mm:ss 格式日期 * @return Date日期 */public static Date paseDate(String formatDate){    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date date=null;    try {        date = format.parse(formatDate);    } catch (ParseException e) {        e.printStackTrace();    }    return date;}public static String getCurrentTimeMilliSecond(){    Date date=new Date();    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");    String formatDate=format.format(date);    return formatDate;} public static String getCurrentMonth(){    Date date=new Date();    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM");    String formatDate=format.format(date);    return formatDate;}/** * 获取当前日期(格式为20110802) * @return */public static String getCurrentDay(){    Date date=new Date();    SimpleDateFormat format=new SimpleDateFormat("yyyyMMdd");    String formatDate=format.format(date);    return formatDate;}/** * 获取当前时间 * @param format 时间格式,例如:yyyy-MM-dd * @param count 增加或减少的天数 * @return */public static String getCurrentDate(String format,Integer count) {    java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format);    Calendar cal = Calendar.getInstance();    cal.setTime(new Date());    cal.add(Calendar.DATE, count);//增加或减少的天数    String currentDate = df.format(cal.getTime());    return currentDate;} /** * 增加月份后的日期数 * @param countMoney * @return */ public static String getDateAddMoney(String dateStr, int m) {        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");        try {            Date date = df.parse(dateStr);            Calendar calendar = Calendar.getInstance();            calendar.setTime(date);            calendar.add(Calendar.MONTH, m);            return df.format(calendar.getTime());        } catch (ParseException e) {            e.printStackTrace();        }        return null;  }  /** * 获取下个月的第一天 * @param time * @param format * @return */public static String getNextMonthFirstDay(String format) {    java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format);    Calendar cal = Calendar.getInstance();    cal.add(Calendar.MONTH, 1);// 当前月+1,即下个月    cal.set(Calendar.DATE, 1);// 将下个月1号作为日期初始值    String currentMonth = df.format(cal.getTime());    return currentMonth;} /** * 获取下个月的最后一天 * @param time * @param format * @return */public static String getNextMonthLastDay(String format) {    java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format);    Calendar cal = Calendar.getInstance();    cal.set(Calendar.DATE, 1);// 将下2个月1号作为日期初始值        cal.add(Calendar.MONTH, 2);// 当前月+2,即下2个月    cal.add(Calendar.DATE, -1);// 下2个月1号减去一天,即得到下1一个月最后一天    String currentMonth = df.format(cal.getTime());    return currentMonth;} public static String format(Date date) {    if(null==date){        return null;    }    SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    String formatDate=format.format(date);    return formatDate;} public static String format(Date date, String formatStr) {    SimpleDateFormat format = new SimpleDateFormat(formatStr);    String formatDate=format.format(date);    return formatDate;} public static String format4Null(Date date, String formatStr) {         if(date == null) {        return null;    } else {                 return format(date, formatStr);    }} /** * 得到2个字符串日期之间的日期差,返回结果以秒为单位 * @param beginTime * @param endTime * @return * @throws ParseException */public static Long getOffTime(String beginTime, String endTime)  {    SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         try{    java.util.Date begin = dfs.parse(beginTime);    java.util.Date end = dfs.parse(endTime);    long between = (end.getTime() - begin.getTime()) / 1000;// 除以1000是为了转换成秒    return between;    }catch(Exception e){        e.printStackTrace();    }    return null;} public static String getYesterday(){    return getCurrentDate("yyyy-MM-dd",-1)+" 00:00:00";} public static String getToday(){    return getCurrentDate("yyyy-MM-dd",0)+" 00:00:00";} public static void  main(String args[]){}  /** * 昨天的起始终止 * &gt;=起始 &lt;终止 * @param nowTime * @return */public static Pair<Long, Long> getLastDay(long nowTime){    try{        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");        String s = sdf.format(new Date(nowTime));        Date yesdEnd = sdf.parse(s);                 return new Pair<Long, Long>(yesdEnd.getTime() - daySpan, yesdEnd.getTime());    }catch (Exception e) {        throw new RuntimeException(e);    }} /** * 取得上一个自然周起始(返回最近的周日0点为结束,之前一个周日0点为开始) * &gt;=起始 &lt;终止 * @param nowTime * @return */public static Pair<Long, Long> getLastNativeWeek(long nowTime){    try{        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");        String s = sdf.format(new Date(nowTime));        Date yesdEnd = sdf.parse(s);    // 今天0点         Calendar c = Calendar.getInstance();        c.setTime(yesdEnd);        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);        long weekEnd = c.getTimeInMillis();        return new Pair<Long, Long>(weekEnd - daySpan * 7, weekEnd);    }catch (Exception e) {        throw new RuntimeException(e);    }} /** * 取得上一个月的起始 * &gt;=起始 &lt;终止 * @param nowTime * @return */public static Pair<Long, Long> getLastMonth(long nowTime){    try{        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-01 00:00:00");        String s = sdf.format(new Date(nowTime));        Date lmEnd = sdf.parse(s);  // 本月1号0点                 Calendar c = Calendar.getInstance();        c.setTime(lmEnd);        c.add(Calendar.MONTH,  -1);         return new Pair<Long, Long>(c.getTimeInMillis(), lmEnd.getTime());    }catch (Exception e) {        throw new RuntimeException(e);    }} /** * 计算两个日期之间相差的月数 * @param startDate 开始日期 * @param endDate 结束日期 * @return 两个日期之间相差的月数 */public static int dateIntervalMonth(Date startDate, Date endDate) {         int intervalMonth = 0;    try {        if(startDate==null || endDate==null){            return intervalMonth;        }        Calendar starCal = Calendar.getInstance();        starCal.setTime(startDate);         int sYear = starCal.get(Calendar.YEAR);        int sMonth = starCal.get(Calendar.MONTH);         Calendar endCal = Calendar.getInstance();        endCal.setTime(endDate);        int eYear = endCal.get(Calendar.YEAR);        int eMonth = endCal.get(Calendar.MONTH);         intervalMonth = ((eYear - sYear) * 12 + (eMonth - sMonth));    } catch (Exception e) {        intervalMonth = 0;    }         return intervalMonth;} /*** * 根据所选格式将字符串转换为日期类型 * @param dateStr  待转换的字符串 * @param formateRule 转换格式 * @return 日期类型结果 */public static Date convertAsDate(String dateStr, String formateRule) {    DateFormat fmt = new SimpleDateFormat(formateRule);    try {        if(dateStr == null) {            return null;        }        return fmt.parse(dateStr);    } catch (ParseException e) {        return null;    }}/** * 自动把String时间转成Date类型 * @param dateStr * @return */public static Date autoConvertAsDate(String dateStr){    try {        if(null ==dateStr){            return null;        }      Object obj = StringUtils.convert(dateStr, Date.class);      if(null!=obj){          return (Date)obj;      }else{          return null;      }    } catch (Exception e) {        return null;    }} public static SimpleDateFormat newTimeFormater(){    return new SimpleDateFormat(TIME_FORMAT_NORMAL);}/**** * 计算时间差,返回秒 * @param start * @param end * @return */public static long timeDifference(long start,long end){    return (end-start)/1000;}  /* 判断输入的字符串是否是合法的生日 生日不能大于当前日期,支持  yyyy-MM-dd ,yyyyMMdd  MM-dd-yyyy  ,yyyy年MM月dd日等 * @param birthday 一个日期格式的字符串 * @param formats  期望转换后的日期格式数组 * @return * */ public static boolean isRightDate(String birthday,String[] formats){             //记录传入的日期字符串,转换成日期类型      Date birth=null;             //判断格式是否正确,默认值为false      boolean isRight=false;      for(String f:formats){           try {                birth =new SimpleDateFormat(f).parse(birthday);                //校验日期转换后是和传入的值不相同,说明日期传入有问题                if(!new SimpleDateFormat(f).format(birth).equals(birthday)){                    return false;                }                isRight=true;                break;           } catch (ParseException e) {}      }             if(isRight){           //获取当前日期的毫秒数           long now =new Date().getTime();           //获取生日的毫秒数           long birthTime = birth.getTime();           //如果当前时间小于生日,生日不合法。反之合法           return birthTime<=now;      }else{           //输入的参数类型不是日期类型,或者类型和过滤中设置的类型不匹配           return false;      } } /***  * 计算时间差,返回天数  * @param b_date 大时间  * @param s_date 小时间  * @return 天数  */ public static long dateSubtract(Date b_date,Date s_date){     if(StringUtils.blank(s_date) || StringUtils.blank(b_date)){         return 0;     }else{         long dateLong1 = b_date.getTime();         long dateLong2 = s_date.getTime();         long day = (dateLong1-dateLong2)/1000/60/60/24;         return day;     } }}

 

DateUtil