我正在尝试使用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位数字似乎会干扰转换。
赞赏输入以解决此问题-我想念什么?
致谢
答案 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')