博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DateUtil时间工具类
阅读量:4181 次
发布时间:2019-05-26

本文共 34508 字,大约阅读时间需要 115 分钟。

package com.xiaobu.base.utils;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.*;import java.util.regex.Matcher;import java.util.regex.Pattern;public class DateUtil {  private static final   Pattern PATTERN_ = Pattern.compile("^\\d{4}(\\-)\\d{2}(\\-)\\d{2}$");    /**     * 当前操作系统日期 Calendar.     */    private static Calendar calendar = new GregorianCalendar(TimeZone.getDefault());    /**     * 日期格式 默认:yyyyMMdd     */    private static final String PATTERN = "yyyyMMdd";    /**     * @author xiaobu     * @date 2018/11/28 14:34     * @descprition 日期格式 默认:yyyy-MM-dd     * @version 1.0     */    private static final String DATE_PATTERN = "yyyy-MM-dd";    /**     * 时间格式 默认:HH:mm:ss     */    private static final String TIME_PATTERN = "HH:mm:ss";    /***     * @author xiaobu     * @date 2018/11/28 14:26     * @descprition 日期格式  yyyy-MM-dd HH:mm:ss     * @version 1.0     */    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";    /***     * @author xiaobu     * @date 2018/11/28 14:26     * @descprition 日期格式  yyyy-MM-dd HH:mm:ss SSS     * @version 1.0     */    private static final String LONG_DATE_TIME_PATTERN= "yyyy-MM-dd HH:mm:ss SSS";    /**     * 年     */    private static int year = 0;    /**     * 月     */    private static int month = 0;    /**     * 日     */    private static int day = 0;    /**     * 时     */    private static int hour = 0;    /**     * 分     */    private static int minute = 0;    /**     * 秒     */    private static int second = 0;    /**     * 静态初始化(默认系统当前日期和时间)     */    static {        year = calendar.get(Calendar.YEAR);        month = calendar.get(Calendar.MONTH) + 1;        day = calendar.get(Calendar.DAY_OF_MONTH);        hour = calendar.get(Calendar.HOUR_OF_DAY);        minute = calendar.get(Calendar.MINUTE);        second = calendar.get(Calendar.SECOND);    }    /**     * 构造方法     */    public DateUtil() {        // Do Nothing    }    /**     * @author xiaobu     * @date 2018/11/28 16:55     * @return java.lang.String yyyy-MM-dd     * @descprition  获取当前时间的年月日     * @version 1.0     */    public static String getCurrentLocalTimeToStr(){        return getLocalTime(DATE_PATTERN);    }    /**     * @author xiaobu     * @date 2018/11/28 16:55     * @return java.lang.String yyyy-MM-dd HH:mm:ss     * @descprition  获取当前时间的年月日     * @version 1.0     */    public static String getCurrentLocalTimeToStr1(){        return getLocalTime(DATE_TIME_PATTERN);    }    /**     * @author xiaobu     * @date 2018/11/28 16:55     * @return java.lang.String yyyy-MM-dd HH:mm:ss SSS     * @descprition  获取当前时间的年月日     * @version 1.0     */    public static String getCurrentLocalTimeToStr2(){        return getLocalTime(LONG_DATE_TIME_PATTERN);    }    /**     * @author xiaobu     * @date 2018/11/28 16:55     * @return java.lang.String yyyy-MM-dd     * @descprition  获取当前时间的年月日     * @version 1.0     */    public static String getCurrentDateTimeToStr() {        return getDateTime(DATE_PATTERN);    }    /**     * @author xiaobu     * @date 2018/11/28 16:59     * @return java.lang.String     * @descprition  获取当前日期 yyyy-MM-dd HH:mm:ss     * @version 1.0     */    public static String getCurrentDateTimeToStr1() {        return getDateTime(DATE_TIME_PATTERN);    }   /**    * @author xiaobu    * @date 2018/11/28 16:59    * @return java.lang.String    * @descprition  获取当前日期 yyyy-MM-dd HH:mm:ss SSS    * @version 1.0    */    public static String getCurrentDateTimeToStr2() {        return getDateTime(LONG_DATE_TIME_PATTERN);    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 年     * @version 1.0     */    public static int getYear() {        return year;    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 年 字符串类型     * @version 1.0     */    public static String getStrYear() {        return String.valueOf(year);    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 月     * @version 1.0     */    public static int getMonth() {        return month;    }    /**     * @param strDate yyyyMMdd     * @return int     * @author xiaobu     * @date 2018/11/28 16:29     * @descprition 获取传入时间的年份     * @version 1.0     */    public static int getYear(String strDate) {        SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");        Date startDate;        int intYear = 0;        try {            startDate = f.parse(strDate);            Calendar starCal = Calendar.getInstance();            starCal.setTime(startDate);            intYear = starCal.get(Calendar.YEAR);        } catch (ParseException e) {            e.printStackTrace();        }        return intYear;    }    /**     * @param strDate yyyyMMdd     * @return int     * @author xiaobu     * @date 2018/11/28 16:29     * @descprition 获取传入时间的月份     * @version 1.0     */    public static int getMonth(String strDate) {        SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");        Date startDate;        int intMonth = 0;        try {            startDate = f.parse(strDate);            Calendar starCal = Calendar.getInstance();            starCal.setTime(startDate);            intMonth = starCal.get(Calendar.MONTH) + 1;        } catch (ParseException e) {            e.printStackTrace();        }        return intMonth;    }    /**     * @param strDate yyyyMMdd     * @return java.lang.String     * @author xiaobu     * @date 2018/11/28 16:31     * @descprition 将短时间格式字符串转换为时间 yyyy-MM-dd     * @version 1.0     */    public static String shortToDate(String strDate) {        return strDate.substring(0, 4) + "-" + strDate.substring(4, 6) + "-" + strDate.substring(6);    }    /**     * @param strTime HHmmss     * @return java.lang.String     * @author xiaobu     * @date 2018/11/28 16:35     * @descprition 将短时间格式字符串转换为时间 HH:mm:ss     * @version 1.0     */    public static String shortToTime(String strTime) {        return strTime.substring(0, 2) + ":" + strTime.substring(2, 4) + ":" + strTime.substring(4);    }  /**   * @author xiaobu   * @date 2018/11/28 17:17   * @return java.lang.String   * @descprition   获取系统当前日期---月   * @version 1.0   */    public static String getStrMonth() {        return month >= 10 ? String.valueOf(month) : "0"                + String.valueOf(month);    }    /**     * @author xiaobu     * @date 2018/11/28 17:29     * @param date Date     * @descprition  获取这是这周的第一天     * @version 1.0     */    public static int getWeek(Date date) {        Calendar c = Calendar.getInstance();        c.setTime(date);        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);        dayOfWeek = dayOfWeek - 1;        if (dayOfWeek == 0) {            dayOfWeek = 7;        }        return dayOfWeek;    }   /**    * @author xiaobu    * @date 2018/11/28 17:16    * @return int    * @descprition   获取系统当前日期---日    * @version 1.0    */    public static int getDay() {        return day;    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 天     * @version 1.0     */    public static String getStrDay() {        return day < 10 ? "0" + String.valueOf(day) : String.valueOf(day);    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 小时     * @version 1.0     */    public static int getHour() {        return hour;    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 分     * @version 1.0     */    public static int getMinute() {        return minute;    }    /**     * @return int     * @author xiaobu     * @date 2018/11/28 16:24     * @descprition 获取系统时间 秒     * @version 1.0     */    public static int getSecond() {        return second;    }    /**     * @return java.lang.String     * @author xiaobu     * @date 2018/11/28 16:22     * @descprition 获取当前的年月日 yyyyMMdd     * @version 1.0     */    public static String getDate() {        SimpleDateFormat format = new SimpleDateFormat(PATTERN);        return format.format(System.currentTimeMillis());    }    /**     * @param pattern 格式     * @return java.lang.String     * @author xiaobu     * @date 2018/11/28 16:17     * @descprition 获取当前时间的字符串时间     * @version 1.0     */    public static String getDateTime(String pattern) {        SimpleDateFormat format = new SimpleDateFormat(pattern);        return format.format(System.currentTimeMillis());    }    /**     * @author xiaobu     * @date 2018/11/28 17:02     * @param pattern 日期格式     * @return java.lang.String     * @descprition  将JDK8的日期格式化     * @version 1.0     */    public static String getLocalTime(String pattern){        DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);        return df.format(LocalDateTime.now());    }    /**     * @param strdate 格式yyyymmdd     * @return boolean     * @author xiaobu     * @date 2018/11/28 16:14     * @descprition 判断给定日期(是否在系统日期之前,是(或等于):true,否:false     * @version 1.0     */    public static boolean isBefore(String strdate) {        Calendar cal = parseCalendar(strdate);        assert cal != null;        return cal.before(calendar);    }    /**     * 功能描述:判断给定的两个日期的前后。strdate1在strdate2之前(或同一天),返回true,反之,false     *     * @param strdate1 日期1     * @param strdate2 日期2     * @return boolean     */    public static boolean isBefore(String strdate1, String strdate2) {        Calendar cal1 = parseCalendar(strdate1);        Calendar cal2 = parseCalendar(strdate2);        return cal1.before(cal2);    }    /**     * 功能描述:计算在当前系统日期增加或减少 n 天后的日期     *     * @param days 增加或减少的天数,正数增加,反之减少     * @date 2008-11-24     */    public static String addByDay(int days) {        Calendar calendar1 = new GregorianCalendar(TimeZone                .getDefault());        calendar1.add(Calendar.DATE, days);        SimpleDateFormat format = new SimpleDateFormat(PATTERN);        Date date = calendar1.getTime();        return format.format(date);    }    /**     * 功能描述:计算在给定的日期加上或减去 n 天后的日期     *     * @param datestr 给定的日期     * @param days    正数增加,反之减少     * @return String     */    public static String addByDay(String datestr, int days) {        Calendar cal = parseCalendar(datestr);        assert cal != null;        cal.add(Calendar.DATE, days);        SimpleDateFormat format = new SimpleDateFormat(PATTERN);        Date date = cal.getTime();        return format.format(date);    }    /**     * 功能描述:计算在给定的日期加上或减去 n 天后的日期     * @param datestr 给定的日期     * @param days    正数增加,反之减少 格式  yyyyMMdd/yyyy-MM-dd     * @return String     */    public static String addByDay(String datestr, int days, String pattern) {        Calendar cal = parseCalendar(datestr);        assert cal != null;        cal.add(Calendar.DATE, days);        SimpleDateFormat format = new SimpleDateFormat(pattern);        Date date = cal.getTime();        return format.format(date);    }    public static String addBySecond(String datestr, int seconds, String pattern) {        Calendar cal = parseCalendar(datestr);        assert cal != null;        cal.add(Calendar.SECOND, seconds);        SimpleDateFormat format = new SimpleDateFormat(pattern);        Date date = cal.getTime();        return format.format(date);    }    /**     * 功能描述:获得给定日期与系统当前日期之间的天数     * @param strdate 给定的日期字符串     * @return long 天数     * @date 2008-11-21     */    public static long getDaysDiffSystem(String strdate,String pattern) {        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);        Date date=null;        try {            date= simpleDateFormat.parse(strdate);        } catch (ParseException e) {            e.printStackTrace();        }        assert date != null;        long millis = date.getTime() - System.currentTimeMillis();        return millis / (24L * 60L * 60L * 1000L);    }    /**     * 功能描述:获得给定日期与系统当前日期之间的月数,不记天数     * @param strdate 给定的日期字符串     * @return long 月数     * @date 2008-11-21     */    private static long getMonths(String strdate) {        long months = getMonth() - Integer.parseInt(strdate.substring(4, 6));        long years = getYear() - Integer.parseInt(strdate.substring(0, 4));        if (!isBefore(strdate)) {            months = -months;            years = -years;        }        if (months >= 0) {            return years * 12 + months;        } else {            return (years - 1) * 12 + months + 12;        }    }    /**     * 功能描述:获得给定日期与系统当前日期之间的月数和天数     *     * @param strdate 给定的日期字符串     * @return long[] 下标0月数,1天数     * @date 2008-11-21     */    public static long[] getMonthsAndDays(String strdate) {        long m = getMonths(strdate);        int d = getDay() - Integer.parseInt(strdate.substring(6, 8));        String date = "";        if (!isBefore(strdate)) {            d = -d;            date = strdate;        } else {            date = getDate();        }        while (d < 0) {            m--;            d += getDaysOfMonth(date);        }        long[] md = {m, d};        return md;    }    /**     * @param strdate 字符串     * @return boolean     * @author xiaobu     * @date 2018/11/28 16:48     * @descprition 判断字符串是否可以转换为日期型 是:true,否:false     * @version 1.0     */    public static boolean isDateStr(String strdate) {        if (strdate.length() != 8) {            return false;        }        String reg = "^(\\d{4})((0([1-9]{1}))|(1[012]))((0[1-9]{1})|([1-2]([0-9]{1}))|(3[0|1]))$";        if (Pattern.matches(reg, strdate)) {            reg = null;            return getDaysOfMonth(strdate) >= Integer.parseInt(strdate                    .substring(6, 8));        } else {            return false;        }    }    /**     * @param strdate 预判断年 格式yyyymmdd 或 yyyy     * @return boolean     * @author xiaobu     * @date 2018/11/28 16:47     * @descprition 判断是否是闰年(年限1000--9999)是:true,否:false     * @version 1.0     */    public static boolean isLeapYear(String strdate) {        int y = Integer.parseInt(strdate.substring(0, 4));        if (y <= 999) {            return false;        }        if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {            return true;        } else {            return false;        }    }    /**     * @param strdate 日期 格式:yyyymmdd 或 yyyymm     * @return int     * @author xiaobu     * @date 2018/11/28 16:46     * @descprition 获取某一月份的天数     * @version 1.0     */    public static int getDaysOfMonth(String strdate) {        int m = Integer.parseInt(strdate.substring(4, 6));        switch (m) {            case 1:            case 3:            case 5:            case 7:            case 8:            case 10:            case 12:                return 31;            case 4:            case 6:            case 9:            case 11:                return 30;            case 2:                if (isLeapYear(strdate)) {                    return 29;                } else {                    return 28;                }            default:                return 0;        }    }    /**     * @param strdate 字符串日期 格式 yyyyMMdd     * @return java.util.Calendar     * @author xiaobu     * @date 2018/11/28 16:07     * @descprition 把字符串日期转Calendar 对象     * @version 1.0     */    public static Calendar parseCalendar(String strdate) {        if (isDateStr(strdate)) {            int year = Integer.parseInt(strdate.substring(0, 4));            int month = Integer.parseInt(strdate.substring(4, 6)) - 1;            int day = Integer.parseInt(strdate.substring(6, 8));            return new GregorianCalendar(year, month, day);        } else {            return null;        }    }    /**     * @param strdate 传入的字符串日期, pattern 格式     * @return java.util.Date     * @author xiaobu     * @date 2018/11/28 16:05     * @descprition 将字符串转换为Date型日期 日期格式yyyymmdd     * @version 1.0     */    public static Date parseDate(String strdate, String pattern) {        SimpleDateFormat format = new SimpleDateFormat(pattern);        Date d = null;        try {            d = format.parse(strdate);        } catch (Exception pe) {            pe.printStackTrace();        }        return d;    }    /**     * @param begin 开始日期, end 结束日期, betweenValue 中间值, DateFormat 日期格式, boundaryValue 是否包含边界值     * @return boolean     * @author xiaobu     * @date 2018/11/28 16:04     * @descprition 判断某个值是否处于两个日期之间     * @version 1.0     */    public static boolean isBetween(String begin, String end,                                    String betweenValue, String DateFormat, boolean boundaryValue) {        boolean flag = false;        SimpleDateFormat dateFormat = new SimpleDateFormat(DateFormat);        try {            Date beginDate = dateFormat.parse(begin);            Date endDate = dateFormat.parse(end);            Date betweenDate = dateFormat.parse(betweenValue);            if (betweenDate.after(beginDate) && betweenDate.before(endDate)) {                flag = true;            }            if (boundaryValue) {                if (betweenDate.compareTo(beginDate) == 0) {                    flag = true;                }                if (betweenDate.compareTo(endDate) == 0) {                    flag = true;                }            }        } catch (ParseException e) {            e.printStackTrace();        }        return flag;    }    /**     * @param tempdate yyyyMMdd, days, format 自定义     * @return java.lang.String     * @author xiaobu     * @date 2018/11/28 15:51     * @descprition     * @version 1.0     */    public static String addDay(String tempdate, int days, String format) {        int year = Integer.parseInt(tempdate.substring(0, 4));        int month = 0;        int day = 0;        String sMonth = tempdate.substring(4, 6);        String sDay = tempdate.substring(6, 8);        if ("0".equals(sMonth.substring(0, 1))) {            month = Integer.parseInt(tempdate.substring(5, 6));        } else {            month = Integer.parseInt(tempdate.substring(4, 6));        }        if ("0".equals(sDay.substring(0, 1))) {            day = Integer.parseInt(tempdate.substring(7, 8));        } else {            day = Integer.parseInt(tempdate.substring(6, 8));        }        GregorianCalendar firstFlight = new GregorianCalendar(year, month - 1,                day);        DateFormat df = new SimpleDateFormat(format);        Date date = firstFlight.getTime();        Calendar cal = Calendar.getInstance();        cal.setTime(date);        cal.add(Calendar.DAY_OF_MONTH, days);        return df.format(cal.getTime());    }    /**     * @param begin, end, format]     * @return long     * @author xiaobu     * @date 2018/11/28 15:35     * @descprition 如果结束日期小余开始日期返回-1 相等返回0否则返回两个日期之间的天数     * @version 1.0     */    public static long getDays(String begin, String end, String format) {        long datanumber = 0;        SimpleDateFormat df = new SimpleDateFormat(format);        long lEnd;        long lBegin;        try {            lEnd = df.parse(end).getTime();            lBegin = df.parse(begin).getTime();            long temp = lEnd - lBegin;            datanumber = temp / (1000L * 60L * 60L * 24L);        } catch (ParseException e) {            e.printStackTrace();        }        if (datanumber < 0) {            datanumber = -1;        }        return datanumber;    }  /**   * @author xiaobu   * @date 2018/11/28 16:54   * @param begin, end, format   * @return boolean   * @descprition   判断end是不是在begin之后.是返回true不是返回false   * @version 1.0   */    public static boolean isAfter(String begin, String end, String format) {        boolean flag = false;        SimpleDateFormat dateFormat = new SimpleDateFormat(format);        try {            Date beginDate = dateFormat.parse(begin);            Date endDate = dateFormat.parse(end);            flag = endDate.after(beginDate);        } catch (ParseException e) {            e.printStackTrace();        }        return flag;    } /**  * @author xiaobu  * @date 2018/11/28 16:53  * @param begin 日期, end 日期, format 格式]  * @return int  * @descprition   begin > end 返回 -1,begin = end 返回 0,begin < end 返回 1.  * @version 1.0  */    public static int compareTo(String begin, String end, String format) {        SimpleDateFormat dateFormat = new SimpleDateFormat(format);        int flag = 0;        try {            Date beginDate = dateFormat.parse(begin);            Date endDate = dateFormat.parse(end);            flag = endDate.compareTo(beginDate);        } catch (ParseException e) {            e.printStackTrace();        }        return flag;    }    /**     * @author xiaobu     * @date 2018/11/28 16:52     * @param year String yyyy     * @return java.lang.String     * @descprition   获得一年的天数     * @version 1.0     */    public static String getDaysOfYear(String year) {        if (isLeapYear(year)) {            return "366";        } else {            return "365";        }    }    /**     * 验证日期格式是否符合xxxx-xx-xx这种格式(只验证格式,不验证日期是否正确)     *     * @param date 日期字符串     * @return 符合:true 不符合:false     */    public static boolean testDate(String date) {        boolean isDate = false;        Matcher matcher = PATTERN_.matcher(date);        isDate = matcher.matches();        return isDate;    }    /**     * @param begin1, end1, format     * @return int     * @author xiaobu     * @date 2018/11/28 15:42     * @descprition 获取两个日期相隔的月数 用Calendar操作的     * @version 1.0     */    public static int getMonth(String begin1, String end1, String format)            throws ParseException {        SimpleDateFormat dateFormat = new SimpleDateFormat(format);        Date s = dateFormat.parse(begin1);        Date e = dateFormat.parse(end1);        if (s.after(e)) {            Date t = s;            s = e;            e = t;        }        Calendar start = Calendar.getInstance();        start.setTime(s);        Calendar end = Calendar.getInstance();        end.setTime(e);        Calendar temp = Calendar.getInstance();        temp.setTime(e);        temp.add(Calendar.DATE, 1);        int y = end.get(Calendar.YEAR) - start.get(Calendar.YEAR);        int m = end.get(Calendar.MONTH) - start.get(Calendar.MONTH);        if ((start.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) == 1)) {// 前后都不破月            return y * 12 + m + 1;        } else if ((start.get(Calendar.DATE) != 1)                && (temp.get(Calendar.DATE) == 1)) {// 前破月后不破月            return y * 12 + m;        } else if ((start.get(Calendar.DATE) == 1)                && (temp.get(Calendar.DATE) != 1)) {// 前不破月后破月            return y * 12 + m;        } else {// 前破月后破月            return (y * 12 + m - 1) < 0 ? 0 : (y * 12 + m - 1);        }    }    /**     * @param begin1 , end1, format     * @return int     * @author xiaobu     * @date 2018/11/28 15:23     * @descprition 获取两个日期的相隔天数     * @version 1.0     */    public static int getDay(String begin1, String end1, String format) {        SimpleDateFormat dateFormat = new SimpleDateFormat(format);        Date startDate = null;        Date endDate = null;        try {            startDate = dateFormat.parse(begin1);            endDate = dateFormat.parse(end1);        } catch (ParseException e) {            e.printStackTrace();        }        assert startDate != null;        assert endDate != null;        if (startDate.after(endDate)) {            Date t = startDate;            startDate = endDate;            endDate = t;        }        return (int) ((getMillis(endDate) - getMillis(startDate)) / (24 * 3600 * 1000));    }    public static long getMillis(Date date){        return date.getTime();    }    /**     * @param s Calendar.getInstance()     * @return int     * @author xiaobu     * @date 2018/11/28 15:22     * @descprition 获取当前日期与月底相隔几天     * @version 1.0     */    public static int getDayP(Calendar s) {        int d;        if (s.get(Calendar.MONTH) == Calendar.FEBRUARY && s.get(Calendar.YEAR) % 4 == 0                && s.get(Calendar.YEAR) % 100 != 0) {// 闰年2月            d = 29;        } else {            Map
m = new HashMap
(); m.clear(); m.put(1, 31); m.put(3, 31); m.put(5, 31); m.put(7, 31); m.put(8, 31); m.put(10, 31); m.put(12, 31); m.put(4, 30); m.put(6, 30); m.put(9, 30); m.put(11, 30); m.put(2, 28); d = m.get(s.get(Calendar.MONTH) + 1); } return d - s.get(Calendar.DATE); } /** * @param begin 2018-11-28, end 2018-09-22 yyyy-MM-dd * @return int * @author xiaobu * @date 2018/11/28 15:13 * @descprition 根据传入的日期 计算两个日期相隔的月数 * @version 1.0 */ public static int getMonths(String begin, String end) { int iMonth = 0; int flag = 0; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date date1 = dateFormat.parse(begin); Date date2 = dateFormat.parse(end); Calendar objCalendarDate1 = Calendar.getInstance(); objCalendarDate1.setTime(date1); Calendar objCalendarDate2 = Calendar.getInstance(); objCalendarDate2.setTime(date2); if (objCalendarDate2.equals(objCalendarDate1)) { return 0; } //比较下大小如果objCalendarDate1大于objCalendarDate2 则互换下 if (objCalendarDate1.after(objCalendarDate2)) { Calendar temp = objCalendarDate1; objCalendarDate1 = objCalendarDate2; objCalendarDate2 = temp; } if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1.get(Calendar.DAY_OF_MONTH)) { flag = 1; } if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) == 30 && objCalendarDate1.get(Calendar.DAY_OF_MONTH) == 31 && objCalendarDate2.get(Calendar.YEAR) >= objCalendarDate1.get(Calendar.YEAR)) { flag = 0;// 草川禾 20110120 添加 处理特殊情况 此处是唯一一种 } // 即结束日期是30天,开始日期日31时计划日期[)情况 if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) == 28 && objCalendarDate1.get(Calendar.DAY_OF_MONTH) == 31 && objCalendarDate2.get(Calendar.YEAR) >= objCalendarDate1.get(Calendar.YEAR)) { flag = 0;// 草川禾 20110120 添加 处理特殊情况 此处是唯一一种 } // 即结束日期是30天,开始日期日31时计划日期[)情况 if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) == 28 && objCalendarDate1.get(Calendar.DAY_OF_MONTH) == 29 && objCalendarDate2.get(Calendar.YEAR) >= objCalendarDate1.get(Calendar.YEAR)) { flag = 0;// 处理getMonthsAndDays("20120229", "20130228")这种情况 } if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) == 29 && objCalendarDate1.get(Calendar.DAY_OF_MONTH) == 31 && objCalendarDate2.get(Calendar.YEAR) >= objCalendarDate1.get(Calendar.YEAR)) { flag = 0;// 草川禾 20110120 添加 处理特殊情况 此处是唯一一种 } // 即结束日期是30天,开始日期日31时计划日期[)情况 if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1.get(Calendar.YEAR)) { iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1.get(Calendar.YEAR)) * 12 + objCalendarDate2.get(Calendar.MONTH) - flag) - objCalendarDate1.get(Calendar.MONTH); } else { iMonth = objCalendarDate2.get(Calendar.MONTH) - objCalendarDate1.get(Calendar.MONTH) - flag; } } catch (Exception e) { e.printStackTrace(); } return iMonth; } /** * @param beginDate, format] * @return boolean * @author xiaobu * @date 2018/11/28 15:45 * @descprition 判断一个日期是否该月的月末 * @version 1.0 */ public static boolean isLastDayOfMonth(String beginDate, String format) { boolean result = false; try { SimpleDateFormat dateFormat = new SimpleDateFormat(format); Date date = dateFormat.parse(beginDate); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1)); if (calendar.get(Calendar.DAY_OF_MONTH) == 1) { result = true; } } catch (ParseException e) { e.printStackTrace(); } return result; } /** * @param monStr 201812 * @return java.lang.String * @author xiaobu * @date 2018/11/28 14:48 * @descprition 获取下个月份 * @version 1.0 */ public static String getNextMon(String monStr) { String result = ""; int year = Integer.parseInt(monStr.substring(0, 4)); int mon = Integer.parseInt(monStr.substring(4)); mon++; if (mon == 13) { mon = 1; year++; } if (mon > 9) { result = year + "" + mon; } else { result = year + "0" + mon; } return result; } /** * @param monStr 201811 * @return java.lang.String * @author xiaobu * @date 2018/11/28 14:45 * @descprition 获取上个月份 * @version 1.0 */ public static String getPreMon(String monStr) { String result = ""; int year = Integer.parseInt(monStr.substring(0, 4)); int mon = Integer.parseInt(monStr.substring(4, 6)); mon--; if (mon == 0) { mon = 12; year--; } if (mon < 10) { result = year + "0" + mon; } else { result = year + "" + mon; } return result; } /** * @param type 查询类型1.日;2.旬;3.月;4.季;5.半年;6.年, dateStr 201811 * @return java.lang.String[] * @author xiaobu * @date 2018/11/28 14:44 * @descprition * @version 1.0 */ public static String[] getDateArray(String type, String dateStr) { if (dateStr.length() == 6) { dateStr += "01"; } String[] dateArray = new String[2]; String yearStr = dateStr.substring(0, 4); String monthStr = dateStr.substring(4, 6); String dayStr = dateStr.substring(6, 8); if ("1".equals(type)) {//日 dateArray[0] = dateStr; dateArray[1] = dateStr; } if ("2".equals(type)) {//计算旬 int d = Integer.parseInt(dayStr); if (d >= 1 && d <= 10) { dateArray[0] = yearStr + monthStr + "01"; dateArray[1] = yearStr + monthStr + "10"; } else if (d >= 11 && d <= 20) { dateArray[0] = yearStr + monthStr + "11"; dateArray[1] = yearStr + monthStr + "20"; } else { dateArray[0] = yearStr + monthStr + "21"; int y = Integer.parseInt(yearStr); if (Integer.parseInt(monthStr) == 12) {//如果本月加1等于12月则需推到下一年 y = y + 1; monthStr = "01"; } else { int monVal = Integer.parseInt(monthStr); monVal++; if (monVal > 9) { monthStr = String.valueOf(monVal); } else { monthStr = "0" + monVal; } } String s = String.valueOf(y) + monthStr + "01"; String ss = addByDay(s, -1);//下月第一天减去一天为本月一号 dateArray[1] = ss; } } if ("3".equals(type)) {//月 int y = Integer.parseInt(yearStr); dateArray[0] = yearStr + monthStr + "01"; if (Integer.parseInt(monthStr) == 12) {//如果本月加1等于12月则需推到下一年 y = y + 1; monthStr = "01"; } else { monthStr = String.valueOf(Integer.parseInt(monthStr) + 1); if (Integer.parseInt(monthStr) < 10) { monthStr = "0" + monthStr; } } String s = String.valueOf(y) + monthStr + "01"; String ss = addByDay(s, -1);//下月第一天减去一天为本月一号 dateArray[1] = ss; } //季 if ("4".equals(type)) { int m = Integer.parseInt(monthStr); if (m >= 1 && m <= 3) { dateArray[0] = yearStr + "01" + "01"; dateArray[1] = yearStr + "03" + "31"; } else if (m >= 4 && m <= 6) { dateArray[0] = yearStr + "04" + "01"; dateArray[1] = yearStr + "06" + "30"; } else if (m >= 7 && m <= 9) { dateArray[0] = yearStr + "07" + "01"; dateArray[1] = yearStr + "09" + "30"; } else if (m >= 10 && m <= 12) { dateArray[0] = yearStr + "10" + "01"; dateArray[1] = yearStr + "12" + "31"; } } //半年 if ("5".equals(type)) { int m = Integer.parseInt(monthStr); if (m >= 1 && m <= 6) { dateArray[0] = yearStr + "01" + "01"; dateArray[1] = yearStr + "06" + "30"; } else if (m >= 7 && m <= 12) { dateArray[0] = yearStr + "07" + "01"; dateArray[1] = yearStr + "12" + "31"; } } //年 if ("6".equals(type)) { dateArray[0] = yearStr + "01" + "01"; dateArray[1] = yearStr + "12" + "31"; } return dateArray; } /** * @author xiaobu * @date 2019/2/26 10:07 * @param unixTime , formats] * @return java.lang.String * @descprition 将10位unix时间戳(精确度为秒)转时间字符串 * @version 1.0 */ public static String unixtime2date(long unixTime, String formats){ long timestamp =unixTime*1000; return timestamp2date(timestamp,formats); } /** * @author xiaobu * @date 2019/2/26 10:08 * @param timestamp , formats] * @return java.lang.String * @descprition 将13位的时间戳(精确度为毫秒)转时间字符串 * @version 1.0 */ public static String timestamp2date(long timestamp, String formats){ return new SimpleDateFormat(formats).format(new Date(timestamp)); } /** * @author xiaobu * @date 2019/2/26 10:24 * @param strDate, formats] * @return long * @descprition 时间字符串转时间戳 * @version 1.0 */ public long strdate2timestamp(String strDate, String formats){ try { return new SimpleDateFormat(formats).parse(strDate).getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0; } /** * @author xiaobu * @date 2019/2/26 10:24 * @param strDate , formats] * @return long * @descprition 时间字符串转unix时间戳 * @version 1.0 */ public long strdate2unixtime(String strDate, String formats){ long timeStamp = strdate2timestamp(strDate, formats); return timeStamp!=0 ? (timeStamp/1000) : 0; }}

 

转载地址:http://vfgai.baihongyu.com/

你可能感兴趣的文章
JAVA之路:第一章 JAVA入门初体验
查看>>
菜鸟文科生的java之路:运算符
查看>>
菜鸟文科生的java之路:变量和常量
查看>>
菜鸟文科生的java之路:流程控制语句
查看>>
北海糖:Java初阶练习题
查看>>
不知道什么是数组?看这里就好了
查看>>
文科生北海唐的Java之路:方法(慕课)
查看>>
自学Java的轨迹线路
查看>>
如何更好的隐藏你自己,让我们谈谈什么是封装?
查看>>
文科生北海糖的:Java之路——继承
查看>>
Makefile 中:= ?= += =的区别
查看>>
消灭编译警告(Warning)
查看>>
(GCC) How can I hide "defined but not used" warnings in GCC?
查看>>
错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
查看>>
error: two or more data types in declaration specifiers原因及解决方法
查看>>
Linux驱动基础开发2
查看>>
ioctl在socket中的一些用法及示例
查看>>
Linux设备驱动--块设备(二)之相关结构体
查看>>
Linux设备驱动--块设备(四)之“自造请求”
查看>>
Nand Flash和Nor Flash相关知识
查看>>