常用时间工具
获取指定日期范围内每天的日期
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
