如何在Mule4中合并日期与时间输出yyyy-MM-ddTHH:mm:ss.SSSZ格式
DataWeave 2.0 实现方案
完全可以通过DataWeave 2.0实现该需求,以下是具体实现逻辑和代码示例:
前提说明
我们默认输入的8位时间字符串格式为HHmmssSSS(前2位为小时,3-4位为分钟,后4位为秒和毫秒),且按照需求固定输出的ss.SSS为00.000。如果时间字符串为其他格式(比如当日总毫秒数),可对应调整拆分逻辑。
实现代码
%dw 2.0 output application/json // 输入参数示例 var rawDateStr = "2021-09-04T00:00:00-05:00" var timeStr = "37320000" // 1. 解析原始日期为DateTime类型 var parsedDate = rawDateStr as DateTime {format: "yyyy-MM-dd'T'HH:mm:ssxxx"} // 2. 提取时间字符串中的小时、分钟 var hour = timeStr[0 to 1] as Number var minute = timeStr[2 to 3] as Number --- // 3. 给原始日期叠加对应时长后格式化输出 (parsedDate + |PT$(hour)H$(minute)M|) as String {format: "yyyy-MM-dd'T'HH:mm:00.000Z"}
逻辑说明
- 首先按照原始日期的格式
yyyy-MM-dd'T'HH:mm:ssxxx将字符串转为DateTime类型,保留原时区信息。 - 从8位时间字符串中截取前两位作为小时、3-4位作为分钟,转为数值类型。
- 使用时间周期运算给原始日期叠加对应时长的小时和分钟,DataWeave会自动处理跨天、跨月等异常场景。
- 最终格式化输出时,直接固定秒和毫秒为
00.000,输出带UTC时区标识Z的目标格式。
适配场景扩展
如果你的输入时间字符串是当日累计的总毫秒数,可调整时间解析逻辑如下:
%dw 2.0 output application/json var rawDateStr = "2021-09-04T00:00:00-05:00" var timeMsStr = "37320000" var parsedDate = rawDateStr as DateTime {format: "yyyy-MM-dd'T'HH:mm:ssxxx"} var totalMs = timeMsStr as Number var hour = (totalMs / 3600000) floor as Number var minute = ((totalMs mod 3600000) / 60000) floor as Number --- (parsedDate + |PT$(hour)H$(minute)M|) as String {format: "yyyy-MM-dd'T'HH:mm:00.000Z"}
内容的提问来源于stack exchange,提问作者RV2509
相关产品推荐
相关产品推荐

