【问题标题】:date operations in mule esb using data weave使用数据编织在 mule esb 中进行日期操作
【发布时间】:2017-02-14 08:06:08
【问题描述】:

我有一个需求,比如需要使用 dataweave 查找两个日期之间的差异,输入和输出都是 XML 格式。

日期格式均为 yyyy.mm.dd,输出日期格式必须为 mm.dd.yy 或 mm.dd.yyyy。

请帮助我,谢谢

【问题讨论】:

标签: mule dataweave


【解决方案1】:

您可以像这样格式化日期(示例):

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

【讨论】:

    【解决方案2】:

    在 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 天

    【讨论】:

    • Hey Abhay,我也得到了相同的输出 :) 但这里的输出日期格式(差异)必须是 mm-dd-yyyy 或 mm-dd-yy
    • 喜欢 09-14-09 9 年 9 个月 14 天?解释一下
    【解决方案3】:

    您可以使用 Java/Groovy 创建一个全局函数,并使用 DateTime 对象来查找差异并从该函数返回。现在您可以在 dataweave 中使用该函数了。

    【讨论】:

      【解决方案4】:

      在 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"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多