DataWeave如何使用dw::core::Dates函数创建月/日为1-9的合法日期
背景
根据DataWeave官方文档对date(..)函数的说明,传入year、month、day三个参数即可创建Date类型数据:
输入示例:
%dw 2.0 import * from dw::core::Dates output application/json --- { newDate: date({year: 2012, month: 10, day: 11}) }
输出示例:
{ "newDate": "2012-10-11" }
问题描述
当传入的month或day值为1到9之间的数字时,会触发日期格式不合法的报错。
多数用户首次遇到该问题时会推测是DataWeave未对1-9的数字自动补前导0,导致生成的日期不符合ISO8601标准yyyy-MM-dd格式要求。但尝试传入补了前导0的字符串01作为参数,又会触发函数要求传入数字类型的报错。
解决方案
dw::core::Dates下的date()函数原生支持接收1-9范围内的数字作为月、日参数,无需手动补前导0,函数内部处理时会自动适配ISO8601格式要求,正确写法如下:
%dw 2.0 import * from dw::core::Dates output application/json --- { // 直接传入1和5作为月、日参数即可 newDate: date({year: 2023, month: 1, day: 5}) }
上述代码的输出结果为:
{ "newDate": "2023-01-05" }
如果你确实遇到了报错,大概率是你没有直接使用date()函数传入对象参数,而是采用了字符串拼接再转日期的错误写法,例如:
// 错误写法:手动拼接字符串时没有补前导0,导致转换失败 date("2023-" ++ 1 ++ "-" ++ 5 as String)
这种场景可以使用as运算符指定日期格式适配无前导0的输入:
// 适配无前导0的字符串输入转Date "2023-1-5" as Date {format: "yyyy-M-d"}
内容的提问来源于stack exchange,提问作者Doug Ayers
相关产品推荐
相关产品推荐

