日期列在Talend中拆分

时间:2014-02-17 16:40:12

标签: date talend

所以我有一个大文件(1300万行),日期格式为:
2009-04-08T01:57:47Z。现在我想把它分成两列,
一个只有dd-MM-yyyy的日期,另一个只有hh:MM的时间。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

你可以简单地使用tMap和parseDate / formatDate来做你想要的。既没有必要也没有建议用regex实现你自己的日期解析逻辑。

首先,使用格式yyyy-MM-dd'T'HH:mm:ss'Z'解析时间戳。然后,您可以使用解析的日期输出所需的格式化日期和时间信息:

  • dd-MM-yyyy日期
  • HH:mm当时(注意:你在问题中混淆了案例,MM代表了这个月)

如果将该逻辑放入tMap:

Using tMap to split a timestamp into date and time columns

您将获得以下内容:

  • 输入:
    • 时间戳2009-04-08T01:57:47Z
  • 输出:
    • 日期08-04-2009
    • 时间01:57

注意

请注意,使用上述格式字符串(yyyy-MM-dd'T'HH:mm:ss'Z')解析时间戳时,不会解析时区信息(将“Z”作为文字)。由于许多应用程序无论如何都没有正确设置时区信息,但总是使用“Z”,因此在大多数情况下可以安全地忽略它。

如果您需要适当的时区处理并且有可能使用Java 7,则可以使用yyyy-MM-dd'T'HH:mm:ssXXX来解析时间戳。

答案 1 :(得分:-1)

我猜Talend会在你的日期时间戳的T和Z部分摔倒,但这很容易解决。

由于您的日期时间戳是常规模式,我们可以使用tExtractRegexFields组件轻松地从中提取日期和时间。

您需要使用"^([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}):[0-9]{2}Z"作为正则表达式,它将以yyyy-MM-dd格式捕获日期,时间为mm:HH(您希望将日期时间字段替换为日期字段和架构中的时间字段。)

然后,要将日期格式化为所需格式,您需要使用tMap并使用TalendDate.formatDate("dd-MM-yyyy",TalendDate.parseDate("yyyy-MM-dd",row7.date))以dd-MM-yyyy格式返回字符串。