Apache Nifi表达语言-toDate格式

时间:2019-01-11 16:49:54

标签: datetime apache-nifi

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

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位数字似乎会干扰转换。

赞赏输入以解决此问题-我想念什么?

致谢

1 个答案:

答案 0 :(得分:3)

似乎是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')