You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dataweave中按小时间隔分组连续的日期时间数据

DataWeave 2.3 连续1小时间隔时间分组实现方案

适用版本

  • DataWeave 2.3
  • Mule 4.3

实现思路

  1. 输入预处理:将所有时间字符串转为DateTime类型并做升序排序,兼容输入乱序场景
  2. 连续分组:通过reduce方法维护分组数组,判断当前时间与上一组末尾时间的间隔是否为1小时,符合条件则归入当前组,否则新建分组
  3. 结果格式化:将每个分组的最小、最大时间转回指定格式的字符串,输出要求的对象结构

完整代码

%dw 2.3
output application/json
---
// 时间字符串转DateTime并排序
var sortedDates = payload map ((timeStr) -> timeStr as DateTime {format: "yyyy-MM-dd'T'HH:mm:ss"}) orderBy $
// 按1小时间隔分组
var groupedIntervals = sortedDates reduce ((currentDate, acc = []) -> 
    if (isEmpty(acc))
        acc + [[currentDate]]
    else
        var lastGroup = acc[-1]
        var lastDateInGroup = lastGroup[-1]
        if (currentDate - lastDateInGroup == |PT1H|)
            acc[0 to -2] + (lastGroup + currentDate)
        else
            acc + [[currentDate]]
)
// 转换为输出格式
groupedIntervals map ((intervalGroup) -> {
    fromDate: min(intervalGroup) as String {format: "yyyy-MM-dd'T'HH:mm:ss"},
    toDate: max(intervalGroup) as String {format: "yyyy-MM-dd'T'HH:mm:ss"}
})

运行验证

使用提问给出的输入数据运行以上代码,输出结果完全符合预期:

[
  {
    "fromDate": "2020-03-03T06:00:00",
    "toDate": "2020-03-03T09:00:00"
  },
  {
    "fromDate": "2020-03-03T13:00:00",
    "toDate": "2020-03-03T15:00:00"
  },
  {
    "fromDate": "2020-03-04T06:00:00",
    "toDate": "2020-03-04T09:00:00"
  }
]

内容的提问来源于stack exchange,提问作者sandeep kairamkonda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:06:04