gpt4 book ai didi

kettle - 在 Pentaho 数据集成中使用偏移量处理 ISO8601 时间戳

转载 作者:行者123 更新时间:2023-12-01 12:41:51 26 4
gpt4 key购买 nike

在 Pentaho 的数据集成(又名 PDI 和 Kettle)中,我想对 ISO 8601 中的日期和时间进行一些处理。格式并具有timezone偏移量信息。例如:

2013-07-26T18:00:00-07:00

截至撰写本文时,已知 Kettle does not understand this date format (尽管它的标准化 26 年前和至少一个后续 PSA )。

如何在不求助于字符串解析的情况下对这些数据进行操作?

最佳答案

我花了几个小时才弄清楚,所以我发布了问答式,希望能为其他人省去麻烦。

PDI 附带一个名为 User Defined Java Expression 的转换步骤(UDJE),它可以接收字段并在这些字段上输出 Java 表达式的结果。它还可以访问 Joda-Time library . Joda 早餐吃 ISO8601。

Java 表达式:

org.joda.time.format.ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dt8601)

将接收一个字段 dt8601 并为您留下一个 Joda DateTimeFormatter可以与日期一起使用。就我而言,我想 convert to Unix time ,所以我的完整表达是:

org.joda.time.format.ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dt8601).getMillis() / 1000L

对于UDJE中的其他字段,“新字段”是你要赋予这个表达式结果的字段名,“值类型”必须是Integer(在PDI中对应Java的Long)。

另外,还有一些关于无效方法的警示故事:

  • 使用“Modified Java Script Value”步骤。你会想也许你可以使用 Date.parse ,但我得到的只是 NaN。此步骤捆绑了一堆自定义日期/字符串转换函数,但没有一个处理时区或 ISO8601。我找到了步骤的 documentation缺乏清晰度和示例并放弃。
  • 对 UDJE 表达式使用 javax.xml.bind.DatatypeConverter.parseDateTime(dt8601).getTime(),如 Pentaho forums post 中所建议的和一个 SO Q&A .这使用了 XML DatatypeConverter并返回 Calendar您可以进一步处理的对象。正如张贴者指出的那样,XML 日期只是“inspired by”ISO8601。这可能会起作用,但我厌倦了编写日期处理代码,想要一些严格符合国际标准的代码。

关于kettle - 在 Pentaho 数据集成中使用偏移量处理 ISO8601 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23707255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com