Personalize a classe de ferramenta de tempo para obter um determinado período de tempo

No desenvolvimento, é comum obter os dados dos últimos 30 dias. Por exemplo, hoje é 20230207. Obter os 29 dias anteriores, incluindo hoje, significa avançar 29 dias. Esse tipo de cálculo de tempo não é incomum. Portanto, o seguinte será citado Uma série de cálculos sobre o tempo.

DataUtil

package com.example.utils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.time.DateUtils;

import com.alibaba.fastjson.JSON;

public class DateUtil {
    
    
    
    public static void main(String[] args) {
    
    
        // TODO Auto-generated method stub
        System.out.println("当天24点时间:" + getTimesnight().toLocaleString());
        System.out.println("去年当天24点时间:" + getLastYearTimesnight().toLocaleString());
        System.out.println("当前时间:" + new Date().toLocaleString());
        System.out.println("当天0点时间:" + getTimesmorning().toLocaleString());
        System.out.println("去年当天0点时间:" + getLastYearTimesmorning().toLocaleString());
        System.out.println("昨天0点时间:" + getYesterdaymorning().toLocaleString());
        System.out.println("近7天时间:" + getWeekFromNow().toLocaleString());
        System.out.println("本周周一0点时间:" + getTimesWeekmorning().toLocaleString());
        System.out.println("本周周日24点时间:" + getTimesWeeknight().toLocaleString());
        System.out.println("上周周一0点时间:" + getTimesLastWeekmorning().toLocaleString()); // 周环比开始
        System.out.println("上周今天24点时间:" + getLastWeekTodayNight().toLocaleString()); // 周环比开始
        System.out.println("本月初0点时间:" + getTimesMonthmorning().toLocaleString());
        System.out.println("本月未24点时间:" + getTimesMonthnight().toLocaleString());
        System.out.println("上月初0点时间:" + getLastMonthStartMorning().toLocaleString()); // 月环比开始
        System.out.println("上月今天24点时间:" + getLastMonthTodayNight().toLocaleString()); // 月环比结束
        System.out.println("本季度开始点时间:" + getCurrentQuarterStartTime().toLocaleString());
        System.out.println("本季度结束点时间:" + getCurrentQuarterEndTime().toLocaleString());
        System.out.println("本年开始点时间:" + getCurrentYearStartTime().toLocaleString());
        System.out.println("本年结束点时间:" + getCurrentYearEndTime().toLocaleString());
        System.out.println("上年开始点时间:" + getLastYearStartTime().toLocaleString());

//        Calendar cal = Calendar.getInstance();
//        System.out.println(cal.get(Calendar.WEEK_OF_YEAR));

        System.out.println(getLastWeekFirst().toLocaleString());
        System.out.println(getLastWeekEnd().toLocaleString());
        System.out.println(JSON.toJSON(getLast7Days()));
        System.out.println(JSON.toJSON(getLast30Days()));
        System.out.println(JSON.toJSON(getLast12Months()));
        System.out.println(JSON.toJSON(getTodayHours()));
        System.out.println(JSON.toJSON(getTodayMonths()));
        System.out.println(JSON.toJSON(getTodayWeeks()));
    }

    public static Date getLastMonthTodayNight() {
    
    
        return DateUtils.addMonths(getTimesnight(), -1);
    }

    /**
     * 当前多少小时 到现在
     * 
     * @return 返回格式 [0,1,2...]
     */
    public static List<String> getTodayHours() {
    
    
        int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
        List<String> hours = new ArrayList<String>();
        for (Integer i = 0; i <= hour; i++)
            hours.add(i.toString());
        return hours;
    }

    /**
     * 当月天数 到今天
     * 
     * @return 返回格式 ['2022-04-01', '2022-04-02', '2022-04-03'...]
     */
    public static List<String> getTodayMonths() {
    
    
        List<String> months = new ArrayList<String>();
        Date end = getTimesnight();
        for (Date begin = getTimesMonthmorning(); begin.getTime() < end.getTime(); begin = DateUtils.addDays(begin, 1))
            months.add(new SimpleDateFormat("yyyy-MM-dd").format(begin));
        return months;
    }

    /**
     * 当周天数 到今天
     * 
     * @return 返回格式 ['2022-04-01', '2022-04-02', '2022-04-03'...]
     */
    public static List<String> getTodayWeeks() {
    
    
        List<String> weeks = new ArrayList<String>();
        Date end = getTimesnight();
        for (Date begin = getTimesWeekmorning(); begin.getTime() < end.getTime(); begin = DateUtils.addDays(begin, 1))
            weeks.add(new SimpleDateFormat("yyyy-MM-dd").format(begin));
        return weeks;
    }

    /**
     * 获取当前 30 天
     * 
     * @return 返回格式 ['04-01', '04-02', '04-03'...]
     */
    public static String[] getLast30Days() {
    
    
        String[] last30Days = new String[30];
        Calendar cal = Calendar.getInstance();
        for (int i = 0; i < 30; i++) {
    
    
            // 月份显示要加1
            last30Days[29 - i] = String.format("%04d", cal.get(Calendar.YEAR)) + "-"
                    + String.format("%02d", cal.get(Calendar.MONTH) + 1) + "-"
                    + String.format("%02d", cal.get(Calendar.DAY_OF_MONTH));
            // 每次减一天
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        return last30Days;
    }

    /**
     * 获取当前 7 天
     * 
     * @return 返回格式 ['04-01', '04-02', '04-03'...]
     */
    public static String[] getLast7Days() {
    
    
        String[] last7Days = new String[7];
        Calendar cal = Calendar.getInstance();
        for (int i = 0; i < 7; i++) {
    
    
            // 月份显示要加1
            last7Days[6 - i] = String.format("%04d", cal.get(Calendar.YEAR)) + "-"
                    + String.format("%02d", cal.get(Calendar.MONTH) + 1) + "-"
                    + String.format("%02d", cal.get(Calendar.DAY_OF_MONTH));
            // 每次减一天
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        return last7Days;
    }
    
    /**
     * 获取当前12 个月
     * 
     * @param dateStr 日期字符串
     * 
     * @return 返回格式 [2017-01,2017-02]
     */
    public static String[] getLast12Months() {
    
    
        String[] last12Months = new String[12];
        Calendar cal = Calendar.getInstance();
        for (int i = 0; i < 12; i++) {
    
    
            // 正序写法: last12Months[11 - i]
            last12Months[11 - i] = cal.get(Calendar.YEAR) + "-" + String.format("%02d", (cal.get(Calendar.MONTH) + 1));
            cal.add(Calendar.MONTH, -1); // 逐次往前推1个月
        }
        return last12Months;
    }

    // 获得去年这周当天的时间
    public static Date getLastWeekEnd() {
    
    
        Calendar cal = Calendar.getInstance();
        int weeks = cal.get(Calendar.WEEK_OF_YEAR);
        int days = cal.get(Calendar.DAY_OF_WEEK);
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.DAY_OF_WEEK, days);
        cal.set(Calendar.WEEK_OF_YEAR, weeks);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    // 获得去年这周一的时间
    public static Date getLastWeekFirst() {
    
    
        Calendar cal = Calendar.getInstance();
        int weeks = cal.get(Calendar.WEEK_OF_YEAR);
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.WEEK_OF_YEAR, weeks);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    // 获得当天0点时间
    public static Date getTimesmorning() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    // 获得去年0点时间
    public static Date getLastYearTimesmorning() {
    
    
        Calendar cal = Calendar.getInstance();
        // 获取去年当天时间
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    // 获得昨天0点时间
    public static Date getYesterdaymorning() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(getTimesmorning().getTime() - 3600 * 24 * 1000);
        return cal.getTime();
    }

    // 获得当天近7天时间
    public static Date getWeekFromNow() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(getTimesmorning().getTime() - 3600 * 24 * 1000 * 7);
        return cal.getTime();
    }

    // 获得当天24点时间
    public static Date getTimesnight() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 24);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    // 获得去年当天24点时间
    public static Date getLastYearTimesnight() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.HOUR_OF_DAY, 24);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    // 获得本周一0点时间
    public static Date getTimesWeekmorning() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return cal.getTime();
    }

    // 获得上周一0点时间
    public static Date getTimesLastWeekmorning() {
    
    
        return DateUtils.addDays(getTimesWeekmorning(), -7);
    }

    // 获得上周今天24点时间
    public static Date getLastWeekTodayNight() {
    
    
        return DateUtils.addDays(getTimesnight(), -7);
    }

    // 获得本周日24点时间
    public static Date getTimesWeeknight() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTime(getTimesWeekmorning());
        cal.add(Calendar.DAY_OF_WEEK, 7);
        return cal.getTime();
    }

    // 获得去年本月第一天0点时间
    public static Date getLastTimesMonthmorning() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, -1);
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
        return cal.getTime();
    }

    // 获得本月第一天0点时间
    public static Date getTimesMonthmorning() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
        return cal.getTime();
    }

    // 获得本月最后一天24点时间
    public static Date getTimesMonthnight() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 24);
        return cal.getTime();
    }

    public static Date getLastMonthStartMorning() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTime(getTimesMonthmorning());
        cal.add(Calendar.MONTH, -1);
        return cal.getTime();
    }

    public static Date getCurrentQuarterStartTime() {
    
    
        Calendar c = Calendar.getInstance();
        int currentMonth = c.get(Calendar.MONTH) + 1;
        SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
        Date now = null;
        try {
    
    
            if (currentMonth >= 1 && currentMonth <= 3)
                c.set(Calendar.MONTH, 0);
            else if (currentMonth >= 4 && currentMonth <= 6)
                c.set(Calendar.MONTH, 3);
            else if (currentMonth >= 7 && currentMonth <= 9)
                c.set(Calendar.MONTH, 4);
            else if (currentMonth >= 10 && currentMonth <= 12)
                c.set(Calendar.MONTH, 9);
            c.set(Calendar.DATE, 1);
            now = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return now;
    }

    /**
     * 当前季度的结束时间,即2012-03-31 23:59:59
     *
     * @return
     */
    public static Date getCurrentQuarterEndTime() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTime(getCurrentQuarterStartTime());
        cal.add(Calendar.MONTH, 3);
        return cal.getTime();
    }

    public static Date getCurrentYearStartTime() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.YEAR));
        return cal.getTime();
    }

    public static Date getCurrentYearEndTime() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTime(getCurrentYearStartTime());
        cal.add(Calendar.YEAR, 1);
        return cal.getTime();
    }

    public static Date getLastYearStartTime() {
    
    
        Calendar cal = Calendar.getInstance();
        cal.setTime(getCurrentYearStartTime());
        cal.add(Calendar.YEAR, -1);
        return cal.getTime();
    }
}

Acho que você gosta

Origin blog.csdn.net/qq_44723773/article/details/128915979
Recomendado
Clasificación