如何在 Talend 中进行动态日期范围迭代?

How to do dynamic date range iteration in Talend?

我将 MinLoginTime 和 MaxLoginTime 存储在 2 个全局地图变量中:

globalMap.put("MinLoginTime","2017-10-24") //ignore the datetime format, but it a date
globalMap.put("MaxLoginTime","2018-04-26")

我想按月进行迭代并获取记录。即在这里我们看到示例中有 7 个月:10,11,12,1,2,3,4

我想生成这些类型的日期:

FromDate    ToDate
2017-10-01  2017-10-31
2017-11-01  2017-11-30
2017-12-01  2017-12-31
...
2018-04-01  2018-04-30

然后,需要遍历每一行并做一些事情(现在让我们使用 tLog)

有人可以帮忙了解一下这里可以使用哪些 Talend 组件来生成日期范围、将它们存储在何处以及如何迭代它们来做某事吗?

您可以使用 Talend 组件和一些 Java 代码的组合非常轻松地实现这一点。 Talend 有很多日期操作函数。

首先,将全局变量日期存储为 Date 类型。

globalMap.put("MinLoginTime", TalendDate.parseDate("yyyy-MM-dd", "2017-10-24"))

然后 tLoop_1 在您的最小日期和最大日期之间的所有月份循环。此代码获取两个日期之间的月数:

TalendDate.diffDate((Date)globalMap.get("MaxLoginTime"),(Date)globalMap.get("MinLoginTime"),"MM")

tJava_3 只是将当前迭代的日期存储在 CURRENT_DATE 全局变量中。它是最小日期和当前迭代值(从 0 到 N 个月)的总和。

globalMap.put("CURRENT_DATE", TalendDate.addDate((Date)globalMap.get("MinLoginTime"), (Integer)globalMap.get("tLoop_1_CURRENT_VALUE"), "MM"))

tFixedFlowInput_1 定义了 2 Date 列:FromDateToDate 以分别获取当前迭代月份的第一天和最后一天。

TalendDate.getFirstDayOfMonth((Date)globalMap.get("CURRENT_DATE"))
TalendDate.getLastDayOfMonth((Date)globalMap.get("CURRENT_DATE"))

检查 TalendDate class 所有日期操作方法的参考。