Skip to content

常用时间工具

获取指定日期范围内每天的日期

java
/**
 * 获取指定日期范围内每天的日期
 * @param startDate 开始日期
 * @param endDate 结束日期
 * @param sdf 格式化实例
 * @return 日期数组
 * eg: getDaysDes("2023-11-18 00:00:00", "2023-11-22 00:00:00",new SimpleDateFormat("yyyy-MM-dd"))
 * result: [2023-11-18, 2023-11-19, 2023-11-20, 2023-11-21, 2023-11-22]
 */
public static List<String> getDaysDes(String startDate, String endDate,SimpleDateFormat sdf) {
        List<String> dateList = new ArrayList<>();
        try {
        Date dateOne = sdf.parse(startDate);
        Date dateTwo = sdf.parse(endDate);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateOne);
        while (dateTwo.after(calendar.getTime())) {
        dateList.add(sdf.format(calendar.getTime()));
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        dateList.add(sdf.format(calendar.getTime()));
        } catch (Exception e) {
        e.printStackTrace();
        }
        return dateList;
        }

使用场景

java
public static void main(String[] args) {
    List<String> daysDes = getDaysDes("2024-01-06 12:30:05", "2024-01-16 12:30:05", new SimpleDateFormat("yyyy-MM-dd"));
    daysDes.forEach(System.out::println);
}

输出: 2024-01-10 2024-01-11 2024-01-12 2024-01-13 2024-01-14 2024-01-15 2024-01-16

获取交易日日期

跳过周六周日以及法定节假日

java
/**
 * 交易日查询
 * 注:下个交易日的calendar要为当日日期 +1
 * @param calendar calendar
 * @param unTradingDays 非交易日日期(法定节假日日期列表)
 * @param upType 日期更新类型 0向后推移 1或其他向前推移
 * @return
 */
public static Calendar getTradingDay(Calendar calendar, List<String> unTradingDays, int upType) {
    String dateFormat = DateUtil.format(DateUtil.DATE_NUM_FORMET, calendar.getTime());
    if (unTradingDays.contains(dateFormat)) {
        if (upType == 0) {
            calendar.add(Calendar.DATE, 1);
        } else {
            calendar.add(Calendar.DATE, -1);
        }
        return getTradingDay(calendar,unTradingDays,upType);
    } else {
        if (upType == 0) {
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
                calendar.add(Calendar.DATE,1);
                return getTradingDay(calendar,unTradingDays,upType);
            } else if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
                calendar.add(Calendar.DATE,2);
                return getTradingDay(calendar,unTradingDays,upType);
            } else {
                return calendar;
            }
        } else {
            if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
                calendar.add(Calendar.DATE,-2);
                return getTradingDay(calendar,unTradingDays,upType);
            } else if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
                calendar.add(Calendar.DATE,-1);
                return getTradingDay(calendar,unTradingDays,upType);
            } else {
                return calendar;
            }
        }
    }
}

使用场景

java
public static void main(String[] args) {
    String unTradingDay = "20241007,20241004,20241003,20241002,20241001,20240917,20240916,20240610,20240503,20240502,20240501,20240405,20240404,20240216,20240215,20240214,20240213,20240212,20240209,20240101";
    List<String> unTradingDays = Arrays.stream(unTradingDay.split(",")).collect(Collectors.toList());
    Date date = new Date();
    Calendar beginCalendar = Calendar.getInstance();
    beginCalendar.setTime(date);
    Calendar begin = DateUtil.isUnTradingDay(beginCalendar, unTradingDays, 1);
    String beginDay = DateUtil.format("MM.dd", begin.getTime());
    Calendar endCalendar = Calendar.getInstance();
    endCalendar.setTime(date);
    endCalendar.add(Calendar.DATE, 1);
    Calendar end = DateUtil.isUnTradingDay(endCalendar, unTradingDays, 0);
    String endDay = DateUtil.format("MM.dd", end.getTime());
    System.out.println(beginDay + " ::: " + endDay);
}

输出: 01.16 ::: 01.17