Java根据传入Date计算所在周、月、季度时间

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianguodk/article/details/84664664
package com.rdmu.schedulingmeetingplace.common;

import org.hibernate.annotations.SourceType;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Calendar操作Date
 */
public class Test {

    /**设置初始值*/
    private static Calendar cal;

    /**
     * 根据当前系统时区定义Calendar
     */
    static {
        cal = Calendar.getInstance();
    }

    /**
     * Date-->String 转换
     * @param date
     * @return
     */
    public static String dateToString(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * 获取指定日期在一周中的第几天
     * @param date
     */
    public static void getDayOfWeek(Date date){
        int dayOfWeek = cal.DATE;
        System.out.println(dayOfWeek);
    }

    /**
     * 获取指定日期是月中的第几天
     * @param date
     */
    public static void getDayOfMonth(Date date){
        int day = date.getDate();
        System.out.println(day);
    }

    /**
     * 获取指定时间所在月份
     * @param date
     */
    public static void getMonth(Date date){
        cal.setTime(date);
        //老外计算月份从0开始,转换为国内月份需要加1
        int month = cal.get(cal.MONTH) + 1;
        System.out.println(month);
    }

    /**
     * 获取指定时间所在周的周一(一天中最小时间)和周天(一天中最大时间)
     * @param date
     */
    public static void getFristAndLashOfWeekDay(Date date){
        cal.setTime(date);
        cal.set(cal.DAY_OF_WEEK,cal.MONDAY);
        Date mondayOld = cal.getTime();
        //老外的一周从周天开始,使用cal.SUNDAY获取到的是上周的周天
        cal.set(cal.DAY_OF_WEEK,cal.SATURDAY);
        //获取周六,加上一天的毫秒数,计算所在周周天,
        cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000);
        Date sundayOld = cal.getTime();

        //考虑到使用判断获取数据时存在部分数据不显示问题,逐将日期格式化处理
        Date mondayNew = mondayOld;
        Date sundayNew = sundayOld;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
            mondayNew = sdf.parse(sdf.format(mondayOld));
            cal.setTime(sdf.parse(sdf.format(sundayOld)));
            //用日期获取数据时会由1秒误差,若要求比较严格,建议不减1,获取下一天的开始时间
            cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1);
            sundayNew = cal.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
            System.out.println("执行类:" + Test.class + "中方法:getStartAndEndWeekDay(Date date) 异常");
        }
        System.out.println(mondayNew);
        System.out.println(String.valueOf(sundayNew));
    }

    /**
     * 获取指定时间所在月的第一天(一天中最小时间)和最后一天(一天中最大时间)
     * @param date
     */
    public static void getFristAndLashOfMonthDay(Date date){
        cal.setTime(date);
        cal.set(cal.DAY_OF_MONTH,1);
        Date firstDay = cal.getTime();
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        Date lastDay = cal.getTime();

        //考虑到使用判断获取数据时存在部分数据不显示问题,逐将日期格式化处理
        Date firstDayNew = firstDay;
        Date lastDayNew = lastDay;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
            firstDayNew = sdf.parse(sdf.format(firstDay));
            cal.setTime(sdf.parse(sdf.format(lastDay)));
            //用日期获取数据时会由1秒误差,若要求比较严格,建议不减1,获取下一天的开始时间
            cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1);
            lastDayNew = cal.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
            System.out.println("执行类:" + Test.class + "中方法:getFristAndLashOfMonthDay(Date date) 异常");
        }

        System.out.println(firstDayNew);
        System.out.println(lastDayNew);
    }

    /**
     * 获取指定时间所在季度的第一天(一天中最小时间)和最后一天(一天中最大时间)
     * @param date
     */
    public static void getFristAndLashOfDuarterDay(Date date){
        cal.setTime(date);
        int month = cal.get(cal.MONTH) + 1;
        int quarter = 0;
        //判断季度
        if (month >= 1 && month <= 3) {
            quarter = 1;
        } else if (month >= 4 && month <= 6) {
            quarter = 2;
        } else if (month >= 7 && month <= 9) {
            quarter = 3;
        } else {
            quarter = 4;
        }
        //获取指定时间所在季度第一天和最后一天
        Date firstDay = null;
        Date lastDay = null;
        String str = String.valueOf(date.getYear());
        String startDay = "";
        String endDay = "";
        switch (quarter){
            case 1://第一季度
                startDay = str + "-01-01 00:00:00";
                endDay = str + "-03-31 23:59:59";
                break;
            case 2://第二季度
                startDay = str + "-04-01 00:00:00";
                endDay = str + "-06-30 23:59:59";
                break;
            case 3://第三季度
                startDay = str + "-07-01 00:00:00";
                endDay = str + "-09-30 23:59:59";
                break;
            case 4://第四季度
                startDay = str + "-10-01 00:00:00";
                endDay = str + "-12-31 23:59:59";
                break;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            firstDay = sdf.parse(startDay);
            //用日期获取数据时会由1秒误差,若要求比较严格,建议不减1,获取下一天的开始时间
            cal.setTime(sdf.parse(endDay));
            cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1);
            lastDay = cal.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(dateToString(firstDay));

        System.out.println(dateToString(lastDay));
    }

    public static void main(String[] args){
        Date date = new Date(119,1,11);
        System.out.println(dateToString(date));
        //获取指定日期具体日
        getDayOfMonth(date);
        //获取指定日期是周几
        getDayOfWeek(date);
        //获取指定时间所在月份
        getMonth(date);
        //获取指定时间所在周的周一和周天
        getFristAndLashOfWeekDay(date);
        //获取指定时间所在月的第一天和最后一天
        getFristAndLashOfMonthDay(date);
        //获取指定时间所在季度第一天和最后一天
        getFristAndLashOfDuarterDay(date);
    }

}

猜你喜欢

转载自blog.csdn.net/tianguodk/article/details/84664664