获取自然周,获取上一个自然月,获取半年(不包含这个月的前6个月)工具类,用于做折线图

package com.timevale.utils;


import lombok.extern.slf4j.Slf4j;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.Year;
import java.util.*;

/**
 * @author lingchen
 * @since 2021-03-23 10:27
 **/
@Slf4j
public class GainUtil {

    //为负数表示前面,i为正数表示后面
    public  static  Map<String,String> getWeekDays(Date date,Integer i){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar1 = Calendar.getInstance();
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        calendar1.setFirstDayOfWeek(Calendar.MONDAY);

        // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
        // 获得当前日期是一个星期的第几天
        int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK);
        if (1 == dayOfWeek) {
            calendar1.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 获得当前日期是一个星期的第几天
        int day = calendar1.get(Calendar.DAY_OF_WEEK);
        //获取当前日期前(下)x周同星几的日期
        calendar1.add(Calendar.DATE, 7*i);
        calendar1.add(Calendar.DATE, calendar1.getFirstDayOfWeek() - day);
        String beginDate = sdf.format(calendar1.getTime());
        calendar1.add(Calendar.DATE, 6);
        String endDate = sdf.format(calendar1.getTime());
        System.out.println(beginDate+" 到 "+endDate);
        HashMap map = new HashMap(16);
        map.put("beginDate",beginDate);
        map.put("endDate",endDate);
        return map;
    }

    /**
     * 获取上一个自然月
     * @param date
     * @param i
     * @return
     */
    public static  Map<String,String> getMonthDays(Date date,Integer i){
        Calendar c=Calendar.getInstance();
        c.add(Calendar.MONTH, i);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //上月
        String gtimelast = sdf.format(c.getTime());
        int lastMonthMaxDay=c.getActualMaximum(Calendar.DAY_OF_MONTH);
        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);

        //格式化输出
        //xxx月第一天
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01");
        String gtime1 = sdf2.format(c.getTime());

        //xxx月最后一天
        String gtime2 = sdf.format(c.getTime());
        System.out.println(gtime1+"至"+gtime2);
        HashMap map = new HashMap(16);
        map.put("beginDate",gtime1);
        map.put("endDate",gtime2);
        return map;
    }


    /**
     *      * 获取某一月份的前六个月
     *      * @param date 日期,格式:"2018-10"
     *      * @return
     *     
     */
    public static List<String> getSixMonth(String date) {
        //返回值
        List<String> list = new ArrayList<String>();
        int month = Integer.parseInt(date.substring(5, 7)) -1;
        int year = Integer.parseInt(date.substring(0, 4));
        for (int i = 5; i >= 0; i--) {
            if (month > 6) {
                if (month - i >= 10) {
                    list.add(year + "-" + String.valueOf(month - i));
                } else {
                    list.add(year + "-0" + String.valueOf(month - i));
                }
            } else {
                if (month - i <= 0) {
                    if (month - i + 12 >= 10) {
                        list.add(String.valueOf(year - 1) + "-" + String.valueOf(month - i + 12));
                    } else {
                        list.add(String.valueOf(year - 1) + "-0" + String.valueOf(month - i + 12));
                    }
                } else {
                    if (month - i >= 10) {
                        list.add(String.valueOf(year) + "-" + String.valueOf(month - i));
                    } else {
                        list.add(String.valueOf(year) + "-0" + String.valueOf(month - i));
                    }
                }
            }
        }
        return list;
    }

    /**
     * 获取当前日期是星期几
     *
     * @param strDate
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(String strDate){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = sdf.parse(strDate);
        } catch (ParseException e) {
            log.error("时间转换异常:{}",e);
            e.printStackTrace();

        }
        String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0) {
            w = 0;
        }
        return weekDays[w];
    }


    /**
     * 获取自然周所有日期
     * @return
     */
    public static  List<String> getWeekdays() {
        Calendar calendar = Calendar.getInstance();
        Map<Integer,String> map = new HashMap<Integer,String>();
        List<String> list = new ArrayList<String>();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
            calendar.add(Calendar.DATE, -1);
            map.put(0,dateFormat.format(calendar.getTime()));
        }
        for (int i = 0; i < 7; i++) {
            map.put(i,dateFormat.format(calendar.getTime()));
            calendar.add(Calendar.DATE, 1);
        }
        for (Integer key : map.keySet()) {
            list.add(map.get(key));
        }
        return list;
    }


    /**
     * 获取两个日期之间的所有日期
     * @param startTime
     * 开始日期
     * @param endTime
     * 结束日期
     * @return
     */
    public static List<String> getDays(String startTime, String endTime) {
        // 返回的日期集合
        List<String> days = new ArrayList<String>();
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date start = dateFormat.parse(startTime);
            Date end = dateFormat.parse(endTime);

            Calendar tempStart = Calendar.getInstance();
            tempStart.setTime(start);

            Calendar tempEnd = Calendar.getInstance();
            tempEnd.setTime(end);
            // 日期加1(包含结束)
            tempEnd.add(Calendar.DATE, +1);
            while (tempStart.before(tempEnd)) {
                days.add(dateFormat.format(tempStart.getTime()));
                tempStart.add(Calendar.DAY_OF_YEAR, 1);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return days;
    }

    /**
     * 传入年和月,获取到本月的第一天:
     * @param monthDate
     * @return Date
     */
    public static String getFirstDayOfMonth(String monthDate) {
        Integer year = Integer.valueOf(monthDate.substring(0, 4));
        Integer month = Integer.valueOf(monthDate.substring(5, 7));
        Calendar cal = Calendar.getInstance();
        //设置年份
        cal.set(Calendar.YEAR, year);
        //设置月份
        cal.set(Calendar.MONTH, month-1);
        //获取某月最小天数
        int firstDay = cal.getMinimum(Calendar.DATE);
        //设置日历中月份的最小天数
        cal.set(Calendar.DAY_OF_MONTH,firstDay);
        //格式化日期
        String firstDayOfMonth = DateUtil.formatDateTime(cal.getTime());
        return firstDayOfMonth;
    }


    /**
     * 传入年和月,获取到本月的最后一天
     * @param monthDate
     * @return
     */
    public static String getLastDayOfMonth(String monthDate) {

        Integer year = Integer.valueOf(monthDate.substring(0, 4));
        Integer month = Integer.valueOf(monthDate.substring(5, 7));

        Calendar cal = Calendar.getInstance();
        //设置年份
        cal.set(Calendar.YEAR, year);
        //设置月份
        cal.set(Calendar.MONTH, month-1);
        //获取某月最大天数
        int lastDay = cal.getActualMaximum(Calendar.DATE);
        //设置日历中月份的最大天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        //格式化日期
        String endDayOfMonth = DateUtil.formatDateTime(cal.getTime());
        return endDayOfMonth;
    }

    /**
     * 根据月份获得第一天和最后一天
     * @param monthDate
     * @return
     */
    public static Map<String,String> getFirstDayAndEndDayOfMonth(String monthDate){
        //String s="2020-09";
        Integer year = Integer.valueOf(monthDate.substring(0, 4));
        Integer month = Integer.valueOf(monthDate.substring(5, 7));

        Calendar cal1 = Calendar.getInstance();
        //设置年份
        cal1.set(Calendar.YEAR, year);
        //设置月份
        cal1.set(Calendar.MONTH, month-1);
        //获取某月最小天数
        int firstDay = cal1.getMinimum(Calendar.DATE);
        //设置日历中月份的最小天数
        cal1.set(Calendar.DAY_OF_MONTH,firstDay);
        //格式化日期
        String firstDayOfMonth = DateUtil.formatDateTime(cal1.getTime());

        Calendar cal2 = Calendar.getInstance();
        //设置年份
        cal2.set(Calendar.YEAR, year);
        //设置月份
        cal2.set(Calendar.MONTH, month-1);
        //获取某月最大天数
        int lastDay = cal2.getActualMaximum(Calendar.DATE);
        //设置日历中月份的最大天数
        cal2.set(Calendar.DAY_OF_MONTH, lastDay);
        //格式化日期
        String endDayOfMonth = DateUtil.formatDateTime(cal2.getTime());
        HashMap map = new HashMap(16);
        map.put("firstDayOfMonth",firstDayOfMonth);
        map.put("lastDayOfMonth",endDayOfMonth);

        return map;

    }

    public static void main(String[] args) throws ParseException {

       /* List<String> weekdays = GainUtil.getWeekdays();
        System.out.println(weekdays);
*/

       /* List<String> sixMonth = GainUtil.getSixMonth(DateUtil.formatDateTime(LocalDateTime.now()));
        System.out.println(sixMonth);

        String weekOfDate = GainUtil.getWeekOfDate("2021-03-22");
        System.out.println(weekOfDate);*/

       /* Map<String, String> weekDays = GainUtil.getMonthDays(new Date(), -1);
        System.out.println(weekDays);*/

        /*
        System.out.println(weekDays);
        System.out.println(beginDate);
        System.out.println(endDate);

*/
        String s="2021-02";
       /* String yearOfString = s.substring(0, 4);
        Integer year = Integer.valueOf(yearOfString);
        System.out.println(year);
        String monthOfString = s.substring(5, 7);
        Integer month = Integer.valueOf(monthOfString);
        System.out.println(month);

        String firstDayOfMonth = GainUtil.getFirstDayOfMonth(year, month);
        System.out.println(firstDayOfMonth);
*/

       //获取当月第一天和最后一天
        //Map<String, String> firstDayAndEndDayOfMonth = GainUtil.getFirstDayAndEndDayOfMonth(s);
        //System.out.println(firstDayAndEndDayOfMonth);

        //获取月份最后一天
        String firstDayOfMonth = GainUtil.getFirstDayOfMonth(s);
        String lastDayOfMonth = GainUtil.getLastDayOfMonth(s);
        System.out.println(firstDayOfMonth);
        System.out.println(lastDayOfMonth);

    }
    /**
     *   //获取上一个自然周
     *         Map<String, String> weekDays = GainUtil.getWeekDays(new Date(), -1);
     *         String beginDate = weekDays.get("beginDate");
     *         String endDate = weekDays.get("endDate");
     *         List<String> days = GainUtil.getDays(beginDate, endDate);
     *         System.out.println(days);
     *         for (int i = 0; i < days.size(); i++) {
     *             //转换星期几
     *             String coverDate = days.get(i);
     *
     *             String weekOfDate = GainUtil.getWeekOfDate(coverDate);
     *             System.out.println(weekOfDate);
     *         }
     *
     *         System.out.println("====================================");
     *         //获取上一个自然月
     *         Map<String, String> monthDays = GainUtil.getMonthDays(new Date(), -1);
     *         String beginDateOfMonth = monthDays.get("beginDate");
     *         String endDateOfMonth = monthDays.get("endDate");
     *         List<String> daysOfMonth = GainUtil.getDays(beginDateOfMonth, endDateOfMonth);
     *         System.out.println(daysOfMonth);
     *
     *         System.out.println("====================================");
     *         //获取前6个月
     *         List<String> sixMonth = GainUtil.getSixMonth(DateUtil.formatDateTime(LocalDateTime.now()));
     *         System.out.println(sixMonth);
     *         for (int i = 0; i < sixMonth.size(); i++) {
     *             System.out.println(sixMonth.get(i));
     *
     *         }
     */
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java小白笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值