【问题标题】:Apache Nifi Expression Language - toDate formattingApache Nifi 表达式语言 - toDate 格式
【发布时间】:2019-06-06 15:07:11
【问题描述】:

我正在尝试使用 Apache Nifi 表达式语言和替换文本处理器(正则表达式)来格式化日期字符串。给定一个日期字符串

date_str : "2018-12-05T11:44:39.717+01:00", 

我希望将其转换为:

correct_mod_date_str: "2018-12-05 10:44:39.717", 

(注意日期如何转换为 UTC,字符 'T' 被空格替换。)

为此,我目前正在使用:

toDate("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')

而且效果很好。

但是,当日期字符串在 ms 中有 6 位而不是 3 位时,事情就会中断:

another_date_str: "2018-12-05T11:44:39.717456+01:00"

转换为:

incorrect_mod_date_str: "2018-12-05 10:56:36.456"

ms 精度中的前 3 位似乎干扰了转换。

感谢您提供解决此问题的意见 - 我缺少什么?

问候

【问题讨论】:

    标签: datetime apache-nifi


    【解决方案1】:

    这似乎是 java 中的一个限制。

    根据 java 文档,不支持超过 3 毫秒的数字。

    https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

    最简单的方法是像这样删除多余的数字:

    attr:replaceAll('(\.\d{3})\d*','$1'):toDate("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"):format("yyyy-MM-dd HH:mm:ss.SSS", '+00:00')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多