【发布时间】:2017-02-14 08:06:08
【问题描述】:
我有一个需求,比如需要使用 dataweave 查找两个日期之间的差异,输入和输出都是 XML 格式。
日期格式均为 yyyy.mm.dd,输出日期格式必须为 mm.dd.yy 或 mm.dd.yyyy。
请帮助我,谢谢
【问题讨论】:
-
您可能想考虑使用 Java 解决方案,stackoverflow.com/questions/27857901/…
我有一个需求,比如需要使用 dataweave 查找两个日期之间的差异,输入和输出都是 XML 格式。
日期格式均为 yyyy.mm.dd,输出日期格式必须为 mm.dd.yy 或 mm.dd.yyyy。
请帮助我,谢谢
【问题讨论】:
您可以像这样格式化日期(示例):
yourInputDate as :localdatetime {format: "yyyy-MM-dd'T'HH:mm:ss"})
您可以添加和减去日期,另一个示例是我如何在带有变量的项目中使用它:
%var stamp = (now as :localdatetime {format: "yyyy-MM-dd'T'HH:mm:ss"})
%var dayDiff = ("P" ++ (stamp.dayOfWeek - 1) ++ "D") as :period
%var firstDateWeek = (stamp - dayDiff) as :localdatetime {format: "yyyy-MM-dd"}
此处的文档:https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-types#datetime
【讨论】:
在 Dataweave 中,您可以将字符串转换为日期格式,然后减去它们
输入
<dates>
<startDate>2007.05.01</startDate>
<endDate>2017.02.15</endDate>
</dates>
变换
%dw 1.0
%var startDate = payload.dates.startDate as :date {format: "yyyy.MM.dd"}
%var endDate = payload.dates.endDate as :date {format: "yyyy.MM.dd"}
%output application/json
---
{
difference: startDate - endDate
}
输出
{
"difference": "P9Y9M14D"
}
9 年 9 个月 14 天
【讨论】:
您可以使用 Java/Groovy 创建一个全局函数,并使用 DateTime 对象来查找差异并从该函数返回。现在您可以在 dataweave 中使用该函数了。
【讨论】:
在 dataweave 中减去两个日期。根据您的要求格式化日期
%dw 1.0
%output application/json
---
{
a: |23:59:56-03:00| - |22:59:56-00:00|,
b: |2003-10-01| - |2002-09-23|
}
{
"a": "PT-4H",
"b": "P-1Y-8D"
}
【讨论】: