Как выполнять операции с датами в Dataweave-Mulesoft

У меня есть логика для фильтрации студентов, которые присоединились до 30 дней. У меня есть дата присоединения и последняя дата в элементе xml. Я должен вычесть даты из этих двух полей, используя переплетение данных.

<School>
  <joindate>2015-10-18T00:00:00.000-08:00</joindate>
  <lastdate>2016-01-18</lastdate>
</School>

person Satheesh Kumar    schedule 14.01.2016    source источник
comment
Узнайте, использует ли ваш процессор XSLT 1.0 или 2.0.   -  person michael.hor257k    schedule 14.01.2016


Ответы (2)


Существует ряд функций даты и времени, доступных в XPath. /XSLT 2.0 и выше. Похоже, что DataWeave поддерживает до XSLT 3.0

Следующее выражение будет относиться ко всем элементам School, где разница в днях между lastdate и joindate меньше 30.

//School[days-from-duration(xs:date(lastdate) - xs:date(xs:dateTime(joindate))) lt 30]
person Mads Hansen    schedule 14.01.2016
comment
Нет, он вернет дату. Вычитание даты из него вернет продолжительность. Вы можете получить количество дней с помощью days-from-duration() - person Mads Hansen; 18.01.2016
comment
Привет, Мэдс Хансен, я попробовал приведенный выше синтаксис в dataweave, но он не поддерживает [ фигурные скобки, не могли бы вы просветить меня, как это сделать, я поражен этим и изо всех сил пытаюсь решить. Можете ли вы сказать, как мы можем реализовать приведенный выше код в переплетении данных? - person Satheesh Kumar; 19.01.2016
comment
Квадратные скобки — это фильтр предикатов (аналогичный предложению where в SQL), который фильтрует элементы слева от фигурных скобок, возвращая только те, для которых оператор предиката возвращает значение true. У меня нет опыта работы с Data Weave, и я не знаю, как/где вы пытаетесь его применить, поэтому не думаю, что смогу помочь вам понять, как его применять. Не могли бы вы опубликовать немного больше кода, показывающего, как вы пытаетесь выбрать/фильтровать элементы школы? - person Mads Hansen; 19.01.2016
comment
Поддерживает ли dataweave XSLT? Ссылка, которую вы дали, описывает XSLT, но на самом деле не дает никакой связи между dataweave и XSLT. Пожалуйста, уточните или поделитесь ссылками, если они у вас есть. - person tortoise; 17.05.2016

Попробуйте с операциями даты и времени DataWeave:

https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#adding-a-period-of-time

получите значения из вашего XML и сохраните их в переменных в DataWeave, приведите их как :date и вычтите их в скрипте.

это пример, который дает вам объект, я думаю, вы можете исправить это оттуда?

%dw 1.0
%output application/java
%var join = payload.School.joindate as :date
%var last = payload.School.lastdate as :date
---
period: join - last
person JoostD    schedule 14.01.2016
comment
Привет, JoostD. Спасибо за помощь, но я получаю результат как P-25Y-11M-16D, как я могу преобразовать это в дни? - person Satheesh Kumar; 18.01.2016
comment
выходная полезная нагрузка содержит объект типа период, у вас не будет всех доступных дней в виде числа. взгляните на этот пост для получения дополнительной информации о том, что, возможно, это поможет вам: stackoverflow.com/questions/30833582/ - person JoostD; 19.01.2016