当前位置:网站首页>Execution plan calculation for different time types
Execution plan calculation for different time types
2022-04-23 16:31:00 【Spilled off】
1. Problem description :
To be described ...
2. Code :
public class DateTimeUtil {
private static final DateTimeFormatter DAY_FULL_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/** * Get a list of all execution times by type and start time * @param startTime Starting time * @param endTime End time * @param type type : day( God ), week( Zhou ), month( month ), quarter( quarter ), year( year ) * @return List of execution dates */
public static List<String> getExecuteDaysByType(String type, LocalDateTime startTime, LocalDateTime endTime) {
LocalDate startDate = startTime.toLocalDate(), endDate = endTime.toLocalDate();
LocalDateTime now = LocalDateTime.now();
LocalDate today = now.toLocalDate();
if("day".equalsIgnoreCase(type)){
if(startDate.isBefore(today)){
startDate = today;
}
return getExecDays(startDate, endDate, now, date -> date.plusDays(1));
}
if("week".equalsIgnoreCase(type)){
// Monday corresponding to the start time
startDate = startDate.minusDays(startDate.getDayOfWeek().getValue()-1);
// This Monday
LocalDate currMonday = today.minusDays(today.getDayOfWeek().getValue()-1);
if(startDate.isBefore(currMonday)){
startDate = currMonday;
}
return getExecDays(startDate, endDate, now, date -> date.plusDays(7));
}
if("month".equalsIgnoreCase(type)){
// The starting time is in the current month 1 Number
startDate = LocalDate.of(startDate.getYear(), startDate.getMonthValue(), 1);
// This month, 1 Number
LocalDate currMonth = LocalDate.of(today.getYear(), today.getMonthValue(), 1);
if(startDate.isBefore(currMonth)){
startDate = currMonth;
}
return getExecDays(startDate, endDate, now, date -> date.plusMonths(1));
}
if("quarter".equalsIgnoreCase(type)){
// Start in the first month of the quarter 1 Number
startDate = LocalDate.of(startDate.getYear(), startDate.getMonth().firstMonthOfQuarter(), 1);
// The first month of this quarter 1 Number
LocalDate currQuarter = LocalDate.of(today.getYear(), today.getMonth().firstMonthOfQuarter(), 1);
if(startDate.isBefore(currQuarter)){
startDate = currQuarter;
}
return getExecDays(startDate, endDate, now, date -> date.plusMonths(3));
}
if("year".equalsIgnoreCase(type)){
// Start in the first month of the year 1 Number
startDate = LocalDate.of(startDate.getYear(), 1, 1);
// First month of the year 1 Number
LocalDate currYear = LocalDate.of(today.getYear(), 1, 1);
if(startDate.isBefore(currYear)){
startDate = currYear;
}
return getExecDays(startDate, endDate, now, date -> date.plusYears(1));
}
return Collections.emptyList();
}
private static List<String> getExecDays(LocalDate startDate, LocalDate endDate, LocalDateTime now, Function<LocalDate, LocalDate> timePlus){
LocalDate today = now.toLocalDate();
List<String> execDays = new ArrayList<>();
while(!startDate.isAfter(endDate)){
if(!startDate.isAfter(today)){
// The execution time is today and before today , At the current time 5 Execute in minutes
execDays.add(now.plusMinutes(5).format(DAY_FULL_FMT));
}else{
execDays.add(startDate.atStartOfDay().format(DAY_FULL_FMT));
}
// Next execution date
startDate = timePlus.apply(startDate);
}
return execDays;
}
}
4.Test:
public static void main(String[] args) {
LocalDateTime startTime = LocalDateTime.of(2020, 7, 1, 12, 0, 0);
LocalDateTime endTime = LocalDateTime.of(2022, 6, 1, 0, 0, 0);
System.out.println(DateTimeUtil.getExecuteDaysByType("year", startTime, endTime));
}
版权声明
本文为[Spilled off]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231403163246.html
边栏推荐
- 05 Lua control structure
- Hypermotion cloud migration completes Alibaba cloud proprietary cloud product ecological integration certification
- JSP learning 3
- logback的配置文件加载顺序
- PHP 零基础入门笔记(13):数组相关函数
- Start Oracle service on Linux
- Function summary of drawing object arrangement in R language
- Questions about disaster recovery? Click here
- Matplotlib tutorial 05 --- operating images
- Sail soft implements a radio button, which can uniformly set the selection status of other radio buttons
猜你喜欢
Homewbrew installation, common commands and installation path
The solution of not displaying a whole line when the total value needs to be set to 0 in sail software
Gartner 发布新兴技术研究:深入洞悉元宇宙
Six scenarios of cloud migration
Oak-d raspberry pie cloud project [with detailed code]
Day 10 abnormal mechanism
The biggest winner is China Telecom. Why do people dislike China Mobile and China Unicom?
Nacos 详解,有点东西
Website pressure measurement tools Apache AB, webbench, Apache jemeter
第九天 static 抽象类 接口
随机推荐
Day (4) of picking up matlab
捡起MATLAB的第(7)天
Hypermotion cloud migration completes Alibaba cloud proprietary cloud product ecological integration certification
linux上啟動oracle服務
What is cloud migration? The four modes of cloud migration are?
LVM and disk quota
欣旺达:HEV和BEV超快充拳头产品大规模出货
MySQL的btree索引和hash索引区别
Grbl learning (II)
Oracle data pump usage
力扣-746.使用最小花费爬楼梯
捡起MATLAB的第(2)天
Report FCRA test question set and answers (11 wrong questions)
Redis "8" implements distributed current limiting and delay queues
Jour (9) de ramassage de MATLAB
299. Number guessing game
Win11 / 10 home edition disables the edge's private browsing function
阿里研发三面,面试官一套组合拳让我当场懵逼
Government cloud migration practice: Beiming digital division used hypermotion cloud migration products to implement the cloud migration project for a government unit, and completed the migration of n
vim编辑器的实时操作