【问题标题】:Date Column Split in TalendTalend 中的日期列拆分
【发布时间】:2014-02-21 23:01:45
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 嗯,你打算用哪种编程语言来解决这个问题?
  • Java 或 Python,我希望它可靠且快速......并且在 talend 数据集成平台内
  • 太棒了 - 那么,到目前为止,您尝试了什么?你的代码是什么样子的?您必须提供一些示例、问题、错误消息等 - 否则人们不会帮助您解决问题。
  • 好的,我尝试在 talend 中使用 tsplit 和 tmap 功能。虽然我只是无法理解。我使用了一些 ETL 平台。所以使用 tmap 我有 TalendDate.formatDate("dd-MM-yyyy",row1.timestamp) 但是当我测试它时,我在线程“main” java.lang.Error 中遇到异常:未解决的编译问题:
  • 时间戳为“2009-04-08T01:57:47Z”列

标签: date talend


【解决方案1】:

您可以简单地使用 tMap 和 parseDate/formatDate 来做您想做的事。既不需要也不建议使用正则表达式实现您自己的日期解析逻辑。

首先,使用yyyy-MM-dd'T'HH:mm:ss'Z'格式解析时间戳。然后就可以使用解析后的Date来输出你想要的格式化日期时间信息了:

  • dd-MM-yyyy 日期
  • HH:mm 时间(注意:您在问题中混淆了大小写,MM 代表月份)

如果您将该逻辑放入 tMap:

您将获得以下信息:

  • 输入:
    • 时间戳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 来解析您的时间戳。

【讨论】:

    【解决方案2】:

    我猜 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 格式的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多