我想知道什么是根据日期范围获取每个月开始日期值的最佳方法。
例如:如果给定的年份范围为2015-11-10 and 2018-01-15
(格式YYYY-mm-dd)。然后,我想提取以下日期:
2015-12-01
2016-01-01
.
.
2018-01-01
答案 0 :(得分:2)
您可以尝试使用此流程在提供的日期范围内生成每月的第一天。
总体流量
第1步配置:开始
第2步配置:配置日期范围
第3步配置:每月生成第一个日期
Groovy脚本
flowFile = session.get();
if(!flowFile)
return;
DATE_FORMAT = 'yyyy-MM-dd';
startDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("start_date"));
endDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("end_date"));
allFirstDates = "";
Calendar calendar = Calendar.getInstance();
Set firstDaysOfMonths = new LinkedHashSet();
for (int i = 0; i <= endDate-startDate; i++) {
calendar.setTime(startDate.plus(i));
calendar.set(Calendar.DAY_OF_MONTH, 1);
firstDayOfMonth = calendar.getTime();
if (firstDayOfMonth.compareTo(startDate) >= 0) {
firstDaysOfMonths.add(calendar.getTime().format(DATE_FORMAT));
}
}
firstDaysOfMonths.each {
firstDayOfMonth -> allFirstDates = allFirstDates + firstDayOfMonth + "\n";
}
flowFile = session.putAttribute(flowFile,"all_first_dates", allFirstDates );
session.transfer(flowFile,REL_SUCCESS)
第4步配置:查看结果
运行输出:
运行流时,属性all_first_dates
将填充日期范围内每个月的第一个日期。