• 日期时间处理工具类使用


    /**
     * 日期时间处理类
     *
     * @author dingxinfa
     * @date 2018-08-15
     **/
    public class DateUtils {
    
    
    
        /**
         *  获取当前时间所在星期的年份
         * @param date
         * @return
         */
        public static int getYearOfWeek(Date date) {
            Calendar c = new GregorianCalendar();
            c.setFirstDayOfWeek(Calendar.MONDAY);
            c.setMinimalDaysInFirstWeek(7);
            c.setTime(date);
            c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
            c.set(Calendar.HOUR_OF_DAY,0);
            c.set(Calendar.MINUTE,0);
            c.set(Calendar.SECOND,0);
            c.set(Calendar.MILLISECOND,0);
    
    
            return c.get(Calendar.YEAR);
        }
    
        /**
         * 获取当前时间所在年的周数
         * @param date
         * @return
         */
        public static int getWeekOfYear(Date date) {
            Calendar c = new GregorianCalendar();
            c.setFirstDayOfWeek(Calendar.MONDAY);
            c.setMinimalDaysInFirstWeek(7);
            c.setTime(date);
    
            int currYear = c.get(Calendar.YEAR);
            int currWeek = c.get(Calendar.WEEK_OF_YEAR);
            c.add(Calendar.DATE, 7);
    
            int nextWeek=c.get(Calendar.WEEK_OF_YEAR);
            int nextYear=c.get(Calendar.YEAR);
    
            if (currYear<nextYear){
                return currWeek;
            }else{
                return currWeek<nextWeek?currWeek:nextWeek-1;
            }
        }
    
        /**
         *  获取确定年 的最大周数
         * @param year
         * @return
         */
        public static int getMaxWeekNumOfYear(int year) {
            Calendar c = new GregorianCalendar();
            c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
    
            return getWeekOfYear(c.getTime());
        }
    
        /**
         *  获取某年的第几周的开始日期
         * @param year
         * @param week
         * @return
         */
        public static Date getFirstDayOfWeek(int year, int week) {
            Calendar c = new GregorianCalendar();
            c.setFirstDayOfWeek(Calendar.MONDAY);
            c.setMinimalDaysInFirstWeek(7);
    
            c.set(Calendar.YEAR, year);
            c.set(Calendar.WEEK_OF_YEAR, week);
            c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    
            Calendar cal = (GregorianCalendar) c.clone();
            cal.set(Calendar.HOUR_OF_DAY,0);
            cal.set(Calendar.MINUTE,0);
            cal.set(Calendar.SECOND,0);
            cal.set(Calendar.MILLISECOND,0);
            return getFirstDayOfWeek(cal.getTime());
        }
    
        /**
         *  获取某年的第几周的结束日期
         * @param year
         * @param week
         * @return
         */
        public static Date getLastDayOfWeek(int year, int week) {
            Calendar c = new GregorianCalendar();
            c.setFirstDayOfWeek(Calendar.MONDAY);
            c.setMinimalDaysInFirstWeek(7);
            c.set(Calendar.YEAR, year);
            c.set(Calendar.WEEK_OF_YEAR, week);
            c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    
            Calendar cal = (GregorianCalendar) c.clone();
            cal.set(Calendar.HOUR_OF_DAY,23);
            cal.set(Calendar.MINUTE,59);
            cal.set(Calendar.SECOND,59);
            cal.set(Calendar.MILLISECOND,999);
            return getLastDayOfWeek(cal.getTime());
        }
    
        /**
         *  获取当前时间所在周的开始日期
         * @param date
         * @return
         */
        public static Date getFirstDayOfWeek(Date date) {
            Calendar c = new GregorianCalendar();
            c.setFirstDayOfWeek(Calendar.MONDAY);
            c.setMinimalDaysInFirstWeek(7);
            c.setTime(date);
            c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
            c.set(Calendar.HOUR_OF_DAY,0);
            c.set(Calendar.MINUTE,0);
            c.set(Calendar.SECOND,0);
            c.set(Calendar.MILLISECOND,0);
            
            return c.getTime();
        }
    
        /**
         *  获取当前时间所在周的结束日期
         * @param date
         * @return
         */
        public static Date getLastDayOfWeek(Date date) {
            Calendar c = new GregorianCalendar();
            c.setFirstDayOfWeek(Calendar.MONDAY);
            c.setMinimalDaysInFirstWeek(7);
            c.setTime(date);
            c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
            c.set(Calendar.HOUR_OF_DAY,23);
            c.set(Calendar.MINUTE,59);
            c.set(Calendar.SECOND,59);
            c.set(Calendar.MILLISECOND,999);
            return c.getTime();
        }
    
        /**
         *  获取当前时间所在月份的开始日期
         * @param date
         * @return
         */
        public static Date getFirstDayOfMonth(Date date) {
            Calendar c = new GregorianCalendar();
            c.setTime(date);
            c.set(Calendar.DAY_OF_MONTH, 1);
            c.set(Calendar.HOUR_OF_DAY,0);
            c.set(Calendar.MINUTE,0);
            c.set(Calendar.SECOND,0);
            c.set(Calendar.MILLISECOND,0);
    
            return c.getTime();
        }
    
        /**
         *  获取当前时间所在月份的结束日期
         * @param date
         * @return
         */
        public static Date getLastDayOfMonth(Date date) {
            Calendar c = new GregorianCalendar();
            c.setTime(date);
            //获取某月最大天数
            int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
            c.set(Calendar.DAY_OF_MONTH, lastDay);
            c.set(Calendar.HOUR_OF_DAY,23);
            c.set(Calendar.MINUTE,59);
            c.set(Calendar.SECOND,59);
            c.set(Calendar.MILLISECOND,999);
            return c.getTime();
        }
    
    
    
        /**
         *  获取某年第几月的开始日期
         * @param year
         * @param month
         * @return
         */
        public static Date getFirstDayOfMonth(int year, int month) {
            Calendar cal = new GregorianCalendar();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH,month);
            cal.set(Calendar.DAY_OF_MONTH, 1);
            cal.set(Calendar.HOUR_OF_DAY,0);
            cal.set(Calendar.MINUTE,0);
            cal.set(Calendar.SECOND,0);
            cal.set(Calendar.MILLISECOND,0);
            return cal.getTime();
        }
    
        /**
         *  获取某年第几月的结束日期
         * @param year
         * @param month
         * @return
         */
        public static Date getLastDayOfMonth(int year, int month) {
            Calendar cal = new GregorianCalendar();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH,month);
            //获取某月最大天数
            int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            cal.set(Calendar.DAY_OF_MONTH, lastDay);
            cal.set(Calendar.HOUR_OF_DAY,23);
            cal.set(Calendar.MINUTE,59);
            cal.set(Calendar.SECOND,59);
            cal.set(Calendar.MILLISECOND,999);
            return cal.getTime();
        }
    
    
        /**
         *  获取今天开始时间
         * @return
         */
        public static Date getTodayStartTime() {
            Calendar cal = new GregorianCalendar();
            cal.setTime(new Date());
            cal.set(Calendar.HOUR_OF_DAY,0);
            cal.set(Calendar.MINUTE,0);
            cal.set(Calendar.SECOND,0);
            cal.set(Calendar.MILLISECOND,0);
            return cal.getTime();
        }
    
        /**
         *  获取今天结束时间
    
         * @return
         */
        public static Date getTodayEndTime() {
            Calendar cal = new GregorianCalendar();
            cal.setTime(new Date());
            cal.set(Calendar.HOUR_OF_DAY,23);
            cal.set(Calendar.MINUTE,59);
            cal.set(Calendar.SECOND,59);
            cal.set(Calendar.MILLISECOND,999);
            return cal.getTime();
        }
    
        /**
         *  获取某一时间开始时间
         * @param date 某天的某一时间
         * @return
         */
        public static Date getOneDayStartTime(Date date) {
            Calendar cal = new GregorianCalendar();
            cal.setTime(date);
            cal.set(Calendar.HOUR_OF_DAY,0);
            cal.set(Calendar.MINUTE,0);
            cal.set(Calendar.SECOND,0);
            cal.set(Calendar.MILLISECOND,0);
            return cal.getTime();
        }
    
        /**
         * 获取某一时间结束时间
         * @param date 某天的某一时间
         * @return
         */
        public static Date getOneDayEndTime(Date date) {
            Calendar cal = new GregorianCalendar();
            cal.setTime(date);
            cal.set(Calendar.HOUR_OF_DAY,23);
            cal.set(Calendar.MINUTE,59);
            cal.set(Calendar.SECOND,59);
            cal.set(Calendar.MILLISECOND,999);
            return cal.getTime();
        }
    
    
        /**
         * date2比date1多的天数
         * @param date1
         * @param date2
         * @return
         */
        public static int differentDays(Date date1,Date date2) {
            Calendar cal1 = Calendar.getInstance();
            cal1.setTime(date1);
    
            Calendar cal2 = Calendar.getInstance();
            cal2.setTime(date2);
            int day1= cal1.get(Calendar.DAY_OF_YEAR);
            int day2 = cal2.get(Calendar.DAY_OF_YEAR);
    
            int year1 = cal1.get(Calendar.YEAR);
            int year2 = cal2.get(Calendar.YEAR);
            if(year1 != year2){
                //不同年份
                int timeDistance = 0 ;
                for(int i = year1 ; i < year2 ; i ++){
                    if(i%4==0 && i%100!=0){
                        //闰年
                        timeDistance += 366;
                    } else if (i%400==0) {
                        //闰年
                        timeDistance += 366;
                    }else{
                        //非闰年
                        timeDistance += 365;
                    }
                }
                return timeDistance + (day2-day1) ;
            } else {
                //同一年份
                return day2-day1;
            }
        }
    
        /**
         *  获取两个日期相差的月数
         * @param maxTime    较大的日期
         * @param minTime    较小的日期
         * @return  如果d1>d2返回 月数差 否则返回0
         */
        public static int differentMonths( Date minTime,Date maxTime) {
            Calendar c1 = Calendar.getInstance();
            Calendar c2 = Calendar.getInstance();
            c1.setTime(maxTime);
            c2.setTime(minTime);
            if(c1.getTimeInMillis() < c2.getTimeInMillis()) {
                return 0;
            }
            int year1 = c1.get(Calendar.YEAR);
            int year2 = c2.get(Calendar.YEAR);
            int month1 = c1.get(Calendar.MONTH);
            int month2 = c2.get(Calendar.MONTH);
    
            int monthInterval =0;
            int yearInterval =0;
            if (month1>=month2){
                yearInterval = year1 - year2;
                monthInterval = month1 - month2  ;
            }else{
                yearInterval = year1 - year2-1;
                monthInterval = (month1+12) - month2  ;
            }
            return yearInterval * 12 + monthInterval;
        }
    
    
        /**
         * 将毫秒数 转换成 格式化时间
         * @param time
         * @return
         */
        public static String formatMillisecond(long time){
            return formatSecond(time/1000);
        }
    
        /**
         * 将秒数 转换成 格式化时间
         * @param time
         * @return
         */
        public static String formatSecond(long time){
            return formatSecond(time,"天" ,"小时","分钟","秒");
        }
    
        /**
         * 将秒数 转换成 格式化时间
         * @param time
         * @return
         */
        public static String formatSecond(long time,String dayFormat,String hourFormat,String minuteFormat,String secondFormat) {
            int mi = 60;
            int hh = mi * 60;
            int dd = hh * 24;
    
            long day = time / dd;
            long hour = (time%dd) / hh;
            long minute = (time%hh) / mi;
            long second = time%mi;
    
            StringBuilder formatTime=new StringBuilder();
            if (day>0){
                formatTime.append(day).append(dayFormat);
            }
            if (hour>0 || ((second>0 || minute>0)&& day > 0)){
                formatTime.append(hour).append(hourFormat);
            }
            if (minute>0 ||((hour>0 ||day > 0) && second>0)){
                formatTime.append(minute).append(minuteFormat);
            }
            if (second>0){
                formatTime.append(second).append(secondFormat);
            }
            return formatTime.toString();
        }
    
        /***
         * 获取时间区间 月份开始|结束 时间列表
         * 示例
         *     param
         *         startLocalDateTime 2020-03-02 12:22:22
         *         endLocalDateTime  2020-05-22 18:18:18
         *     return
         *         2020-03-02 12:22:22,2020-03-31 23:59:59.999
         *         2020-04-01 00:00:00,2020-04-30 23:59:59.999
         *         2020-05-01 00:00:00,2020-05-22 18:18:18
         * @param startLocalDateTime
         * @param endLocalDateTime
         * @return
         */
        public static List<LocalDateTime[]> getLocalDateTimeIntervalMonthStartEndTime(LocalDateTime startLocalDateTime,LocalDateTime endLocalDateTime){
            if (startLocalDateTime.isAfter(endLocalDateTime)){
                LocalDateTime temp=startLocalDateTime;
                startLocalDateTime=endLocalDateTime;
                endLocalDateTime=temp;
            }
            List<LocalDateTime[]> localDateTimeList=new ArrayList<>();
    
            LocalDateTime currDateTime=startLocalDateTime;
            LocalDateTime currMonthEndDateTime = LocalDateTime.of(LocalDate.of(currDateTime.getYear(),currDateTime.getMonth(),currDateTime.getDayOfMonth()), LocalTime.MAX).with(TemporalAdjusters.lastDayOfMonth());
    
            if (currMonthEndDateTime.isBefore(endLocalDateTime)) {
                localDateTimeList.add(new LocalDateTime[]{currDateTime, currMonthEndDateTime});
            } else {
                localDateTimeList.add(new LocalDateTime[]{startLocalDateTime, endLocalDateTime});
            }
    
            do{
                currDateTime = LocalDateTime.of(LocalDate.of(currDateTime.getYear(),currDateTime.getMonth(),currDateTime.getDayOfMonth()), LocalTime.MIN).with(TemporalAdjusters.firstDayOfNextMonth());
                currMonthEndDateTime = LocalDateTime.of(LocalDate.of(currDateTime.getYear(),currDateTime.getMonth(),currDateTime.getDayOfMonth()), LocalTime.MAX).with(TemporalAdjusters.lastDayOfMonth());
                if (currMonthEndDateTime.isBefore(endLocalDateTime)) {
                    localDateTimeList.add(new LocalDateTime[]{currDateTime, currMonthEndDateTime});
                } else {
                    if (currDateTime.isBefore(endLocalDateTime)) {
                        localDateTimeList.add(new LocalDateTime[]{currDateTime, endLocalDateTime});
                    }
                }
            }while(currMonthEndDateTime.isBefore(endLocalDateTime));
    
            return localDateTimeList;
        }
    
        public static void main(String[] args) {
            List<LocalDateTime[]> localDateTimeList=getLocalDateTimeIntervalMonthStartEndTime(LocalDateTime.of(2020,5,30,12,12,12,256),LocalDateTime.of(2020,5,30,12,12,12,888));
    
            System.out.println(localDateTimeList.toArray().toString());
    
        }
    }
  • 相关阅读:
    selenium 安装
    创建项目/执行
    mysql远程访问
    如何通过批处理文件直接运行python代码
    python中通过字典实现函数指针
    装饰器
    正则表达式学习笔记
    Jupyter使用
    【数学】一张通往数学世界的地图-阅读笔记
    【算法导论】二叉搜索树的删除除操作
  • 原文地址:https://www.cnblogs.com/panbingqi/p/13807279.html
Copyright © 2020-2023  润新知