Mule4 DataWeave 2.0日期格式化'T'字符解析报错求助
解决Mule4 DataWeave 2.0的两个日期处理问题
嘿,作为Mule4新手碰到日期处理的问题太正常啦,我帮你把这两个坑逐个填平:
问题1:解析带'T'的日期字符串2019-02-27T15:43:38.38
你遇到的无法解析'T'的问题,核心是格式字符串没有正确匹配日期结构,同时要注意DataWeave日期格式的大小写规则(新手很容易踩这个坑)。
正确的解析方式是在格式字符串里直接保留'T',同时对应好各个时间部分的格式:
%dw 2.0 output application/json --- { parsedDateTime: "2019-02-27T15:43:38.38" as DateTime {format: "yyyy-MM-dd'T'HH:mm:ss.SS"} }
关键说明:
yyyy-MM-dd:MM代表两位数的月份(千万别写成mm,那是分钟!)'T':用单引号包裹'T',告诉解析器这是固定字符,不是格式占位符HH:mm:ss.SS:HH是24小时制小时,SS对应两位毫秒(你的日期字符串里是.38,刚好匹配)
问题2:格式化当前时间为yyyy-mm-dd'T'HH:59:59时的语法异常
你的代码报错是因为单引号嵌套导致的语法错误:格式字符串用单引号括起来后,里面的'T'会被解析器当成字符串结束标记,进而把T当成未定义的变量,所以抛出Unable to resolve variable T的异常。另外还有个小问题:你写的mm是分钟,要表示月份得用MM。
两种正确的写法:
写法1:用双引号包裹格式字符串(推荐,更简洁)
%dw 2.0 output application/json --- { StopDate: now() as String {format: "yyyy-MM-dd'T'HH:59:59"} }
写法2:用转义单引号处理嵌套
如果坚持用单引号包裹格式字符串,需要用\'转义内部的单引号:
%dw 2.0 output application/json --- { StopDate: now() as String {format: 'yyyy-MM-dd\'T\'HH:59:59'} }
关键说明:
- 把
mm改成MM:保证输出的是两位数的月份,而不是分钟 - 避免单引号嵌套:要么换双引号,要么转义内部单引号,这样解析器才能正确识别格式字符串的边界
额外小提示
DataWeave的日期格式大小写区分很严格,记住几个常用的:
yyyy:4位年份 |MM:2位月份 |dd:2位日期HH:24小时制小时 |hh:12小时制小时 |mm:分钟 |ss:秒 |SSS:3位毫秒
内容的提问来源于stack exchange,提问作者user3073887
相关产品推荐
相关产品推荐

