apache-nifi - 如何根据Nifi流中的给定年份范围获取每个月的第一个日期
问题描述
我想知道根据日期范围获取每个月的起始日期值的最佳方法是什么。
例如:如果给我一个年份范围2015-11-10 and 2018-01-15
(格式 YYYY-mm-dd)。然后我想提取以下日期:
2015-12-01
2016-01-01
.
.
2018-01-01
解决方案
您可以尝试使用此流程在提供的日期范围内生成每个月的第一天。
总流量
步骤 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
将填充日期范围内每个月的第一个日期。
推荐阅读
- ruby-on-rails-6 - 如何在 Rails 6 上生成 master.key?
- python - 气流:使用通配符从 S3 下载最新文件
- mysql - JMeter JDBC 手动提交
- kubernetes - Kubernetes cronjob 无法访问数据库服务
- python - 使用 matplotlib 在热图中绘制 x、y、数据
- android - 如何通过将鼠标悬停在 android studio 中的小部件上(如 Visual Studio Code)来获取定义
- javascript - 为什么我的网站设计在省略“www.”时无法正确加载?从网址?
- android - 延迟重复协程
- c++ - 为什么我最后需要从 while 条件中减去 7 才能使我的代码正常工作
- javascript - Vue v-for循环点击事件影响所有项目