Java 获取过去24小时、一周、一个月的日期

10 篇文章 0 订阅
背景

    一种常见的需求是获取当前时刻的过去24小时小时数、过去一周的日期,过去一个月的日期等等,由于该类需求比较常用,而且其中也涉及闰月、平月的概念,故把这几个方法整理了一下以备不时之需。

实现

    分别对过去24小时、过去一周、过去一个月需要返回的东西进行抽象成POJO类,其中参数可根据实际需求自定义修改。
    以下类设置两个list存放过去24小时的日期数+小时数,以及小时数。

@Data
public class Last24HourInfo {

    /**
     * 过去24小时的日期数+小时数(如11-25 5 时)
     */
    private List<String> hourStrList;

    /**
     * 过去24小时的小时数整形数据list
     */
    private List<Integer> hourIntList;
    
}

    以下POJO类设置三个list存放过去一周的各类数据

@Data
public class LastWeekDateInfo {

    /**
     * 周一至周日的list
     */
    private List<String> weekList;


    /**
     * 过去一周的日期(月-日)的list
     */
    private List<String> dateStrList;


    /**
     * 过去一周的日期(日)整形数据的list
     */
    private List<Integer> dateIntList;
}

    另外把周几定义为枚举类,以便后续使用

public enum EnumWeekInfo {

    MON(1,"周一"),

    TUE(2,"周二"),

    WEN(3,"周三"),

    THURS(4,"周四"),

    FRI(5,"周五"),

    SAT(6,"周六"),

    SUN(7,"周日");

    private Integer dateCode;

    private String dateMsg;

    EnumWeekInfo(Integer dateCode,String dateMsg){
        this.dateCode = dateCode;
        this.dateMsg = dateMsg;
    }

    public static String getWeekValue(int dateCode){
        for (EnumWeekInfo meta:EnumWeekInfo.values()){
            if (meta.dateCode==dateCode){
                return meta.dateMsg;
            }
        }
        return null;

    }
}

    以下POJO类设置两个list存放过去一个月的日期各类数据

@Data
public class LastMonthInfo {
    /**
     * 过去一个月的日期字符型数据list
     */
    private List<String> dateStrList;

    /**
     * 过去一个月的日期整型数据list
     */
    private List<Integer> dateIntList;

}

    最后,工具类中的方法如下

public static LastWeekDateInfo getLastWeekDate(){
    List<String> dayOfWeekList = new ArrayList<>(7);
    List<String> strDayOfMonthList = new ArrayList<>(7);
    List<Integer> intDayOfMonthList = new ArrayList<>(7);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    //确定dayOfWeek的起始位置,周日为1,以此类推
    int startIndex;
    //若当天为周日
    if (1==dayOfWeek){
        startIndex = 1;
        for (int j = startIndex; j < 8; j++){
            dayOfWeekList.add(EnumWeekInfo.getWeekValue(j));
        }
    }else {
        startIndex = dayOfWeek;
        for (int k = startIndex; k <=7; k++){
            dayOfWeekList.add(EnumWeekInfo.getWeekValue(k));
        }
        for (int l = 1; l < dayOfWeek; l++){
            dayOfWeekList.add(EnumWeekInfo.getWeekValue(l));
        }
    }
    //获取dayOfMonth的起始位置
    if (dayOfMonth>=7){
        int dayBegin = dayOfMonth - 6;
        int currentMonth = calendar.get(Calendar.MONTH)+1;
        for (int i = dayBegin; i <= dayOfMonth; i++){
            intDayOfMonthList.add(i);
            strDayOfMonthList.add(currentMonth+"-"+i);
        }
    }else {
        int complimentCnt = 7 - dayOfMonth;
        calendar.set(Calendar.DAY_OF_MONTH,0);
        int preMonth = calendar.get(Calendar.MONTH)+1;
        int lastEnd = calendar.get(Calendar.DAY_OF_MONTH);
        int dayOfMonthStartIndex = lastEnd - complimentCnt +1;
        for (int m = dayOfMonthStartIndex; m <=lastEnd;m++){
            strDayOfMonthList.add(preMonth+"-"+m);
            intDayOfMonthList.add(m);
        }
        calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int currentMonth = calendar.get(Calendar.MONTH)+1;
        for (int n = 1; n <= dayOfMonth; n++){
            strDayOfMonthList.add(currentMonth+"-"+n);
            intDayOfMonthList.add(n);
        }
    }
    LastWeekDateInfo lastWeekDateInfo = new LastWeekDateInfo();
    lastWeekDateInfo.setDateStrList(strDayOfMonthList);
    lastWeekDateInfo.setWeekList(dayOfWeekList);
    lastWeekDateInfo.setDateIntList(intDayOfMonthList);
    return lastWeekDateInfo;
}


public static Last24HourInfo getLast24Hour(){
    List<Integer> timeIntList = new ArrayList<>(24);
    List<String> timeStrList = new ArrayList<>(24);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    int monthOfToday = calendar.get(Calendar.MONTH)+1;
    int dateOfToday = calendar.get(Calendar.DAY_OF_MONTH);
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    calendar.add(Calendar.DATE,-1);
    int monthOfLastDay = calendar.get(Calendar.MONTH)+1;
    int dateOfLastDay = calendar.get(Calendar.DATE);
    //确定起始位置
    int startIndex;
    if (0==hour){
        //整形数据List是0-23
        startIndex = 0;
        //往前推一天
        for (int j = startIndex; j < 24; j++){
            timeIntList.add(j);
            timeStrList.add(monthOfLastDay+"-"+dateOfLastDay+" "+j);
        }
    }else {
        //分两段
        startIndex = hour + 1;
        for (int k = startIndex; k < 24; k++){
            timeIntList.add(k);
            timeStrList.add(monthOfLastDay+"-"+dateOfLastDay+" "+k);
        }
        for (int l = 0; l <= hour; l++){
            timeIntList.add(l);
            timeStrList.add(monthOfToday+"-" + dateOfToday+" "+l);
        }
    }
    Last24HourInfo last24HourInfo = new Last24HourInfo();
    last24HourInfo.setHourIntList(timeIntList);
    last24HourInfo.setHourStrList(timeStrList);
    return last24HourInfo;
}


public static LastMonthInfo getLastMonthDate(){
    List<Integer> dayIntList = new ArrayList<>(31);
    List<String> dayStrList = new ArrayList<>(31);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    int currentMonth = calendar.get(Calendar.MONTH)+1;
    int currentDate = calendar.get(Calendar.DAY_OF_MONTH);
    calendar.set(Calendar.DAY_OF_MONTH,0);
    int lastMonth = calendar.get(Calendar.MONTH)+1;
    int lastEnd = calendar.get(Calendar.DAY_OF_MONTH);
    //确定起始位置
    int startIndex;
    if (currentDate>=30){
        startIndex = 1;
        for (int j = startIndex; j <= currentDate; j++){
            dayIntList.add(j);
            dayStrList.add(currentMonth+"-"+j);
        }
    }else {
        startIndex = currentDate + 1;
        for (int k = startIndex; k <= lastEnd; k++){
            dayIntList.add(k);
            dayStrList.add(lastMonth+"-"+k);
        }
        for (int l = 1; l <= currentDate; l++){
            dayIntList.add(l);
            dayStrList.add(currentMonth + "-" +l);
        }
    }
    LastMonthInfo lastMonthInfo = new LastMonthInfo();
    lastMonthInfo.setDateIntList(dayIntList);
    lastMonthInfo.setDateStrList(dayStrList);
    return lastMonthInfo;
}

以上代码亲测运行正确!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值