当前位置:网站首页>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
边栏推荐
- linux上啟動oracle服務
- What is cloud migration? The four modes of cloud migration are?
- 捡起MATLAB的第(10)天
- Use if else to judge in sail software - use the title condition to judge
- LVM与磁盘配额
- 关于 background-image 渐变gradient()那些事!
- vim编辑器的实时操作
- Day (4) of picking up matlab
- Phpstudy V8, a commonly used software for station construction 1 graphic installation tutorial (Windows version) super detailed
- 捡起MATLAB的第(6)天
猜你喜欢
volatile的含义以及用法
Oak-d raspberry pie cloud project [with detailed code]
You need to know about cloud disaster recovery
Countdown 1 day ~ 2022 online conference of cloud disaster tolerance products is about to begin
下载并安装MongoDB
The first line and the last two lines are frozen when paging
The biggest winner is China Telecom. Why do people dislike China Mobile and China Unicom?
Day 10 abnormal mechanism
撿起MATLAB的第(9)天
Force buckle - 198 raid homes and plunder houses
随机推荐
Creation of RAID disk array and RAID5
Cloudy data flow? Disaster recovery on cloud? Last value content sharing years ago
299. Number guessing game
Homewbrew installation, common commands and installation path
Best practice of cloud migration in education industry: Haiyun Jiexun uses hypermotion cloud migration products to implement progressive migration for a university in Beijing, with a success rate of 1
NVIDIA显卡驱动报错
Day (7) of picking up matlab
Day (4) of picking up matlab
Grbl learning (I)
What is cloud migration? The four modes of cloud migration are?
Install redis and deploy redis high availability cluster
捡起MATLAB的第(2)天
Construction of esp32 compilation environment
磁盘管理与文件系统
最详细的背包问题!!!
Hypermotion cloud migration completes Alibaba cloud proprietary cloud product ecological integration certification
Method 2 of drawing ROC curve in R language: proc package
The biggest winner is China Telecom. Why do people dislike China Mobile and China Unicom?
G008-HWY-CC-ESTOR-04 华为 Dorado V6 存储仿真器配置
捡起MATLAB的第(4)天