Язык выражений Apache Nifi - форматирование toDate - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь отформатировать строку даты, используя язык выражений 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')

и это прекрасно работает.

Однако, когда строка даты имеет 6 цифр в мс , а не 3, вещи ломаются:

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

преобразуется в:

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

Кажется, что первые 3 цифры в точности мс мешают преобразованию.

Цените входные данные, чтобы решить эту проблему - что мне не хватает?

Привет

1 Ответ

0 голосов
/ 12 января 2019

кажется, что это ограничение в 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')
...