当前位置:网站首页>不同时间类型的执行计划计算
不同时间类型的执行计划计算
2022-04-23 14:03:00 【洒了脱】
1.问题描述:
待叙。。。
2.代码:
public class DateTimeUtil {
private static final DateTimeFormatter DAY_FULL_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/** * 按类型和起始时间获取所有执行时间列表 * @param startTime 开始时间 * @param endTime 结束时间 * @param type 类型: day(天), week(周), month(月), quarter(季度), year(年) * @return 执行日期列表 */
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)){
//开始时间对应的周一
startDate = startDate.minusDays(startDate.getDayOfWeek().getValue()-1);
//本周一
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)){
//开始时间当月1号
startDate = LocalDate.of(startDate.getYear(), startDate.getMonthValue(), 1);
//本月1号
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)){
//开始时间当季度首月1号
startDate = LocalDate.of(startDate.getYear(), startDate.getMonth().firstMonthOfQuarter(), 1);
//本季度首月1号
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)){
//开始时间当年首月1号
startDate = LocalDate.of(startDate.getYear(), 1, 1);
//本年度首月1号
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)){
//执行时间在今天及今天以前,则在当前时间5分钟后执行
execDays.add(now.plusMinutes(5).format(DAY_FULL_FMT));
}else{
execDays.add(startDate.atStartOfDay().format(DAY_FULL_FMT));
}
//下一个执行日期
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));
}
版权声明
本文为[洒了脱]所创,转载请带上原文链接,感谢
https://blog.csdn.net/xhom_w/article/details/119641651
边栏推荐
- 微信小程序获取登录用户信息、openid和access_token
- Prediction of tomorrow's trading limit of Low Frequency Quantization
- Check in system based on ibeacons
- RobotFramework 之 用例执行
- 基于CM管理的CDH集群集成Phoenix
- Restful WebService和gSoap WebService的本质区别
- DDT+Excel进行接口测试
- 项目中遇到的问题(五)操作Excel接口Poi的理解
- JS 力扣刷题 102. 二叉树的层序遍历
- Ptorch classical convolutional neural network lenet
猜你喜欢

1256: bouquet for algenon

Crontab timing task output generates a large number of mail and runs out of file system inode problem processing

smart-doc + torna生成接口文档

基于Ocelot的gRpc网关

PATH环境变量

RobotFramework 之 用例执行

STM32 learning record 0007 - new project (based on register version)

Quartus Prime硬件实验开发(DE2-115板)实验二功能可调综合计时器设计

蓝绿发布、滚动发布、灰度发布,有什么区别?

PySide2
随机推荐
Quartus prime hardware experimental development (de2-115 board) experiment 1 CPU instruction calculator design
Spark入门基本操作
switch使用(微信小程序)
Decimal 格式化小数位/DateTime 转换处理
Quartus Prime硬件实验开发(DE2-115板)实验一CPU指令运算器设计
网站_收藏
China creates vast research infrastructure to support ambitious climate goals
RobotFramework 之 用例执行
趣谈网络协议
基础知识学习记录
JS 力扣刷题 103. 二叉树的锯齿形层序遍历
scikit-learn构建模型的万能模板
1256: bouquet for algenon
request模块
微信小程序进行蓝牙初始化、搜索附近蓝牙设备及连接指定蓝牙(一)
smart-doc + torna生成接口文档
快速安装mongodb
Chrome插件 之 Selenium IDE、XPath 安装
基于微信小程序的wifi模块使用
JS force deduction brush question 103 Zigzag sequence traversal of binary tree