DataWeave 1(Mule3)是否存在日期月份指定语言转换的函数或依赖?格式转换问题求助
在DataWeave 1(Mule 3)中实现指定语言的日期月份格式化
我来帮你解决这个日期本地化的问题——在DataWeave 1里,你之前的写法没生效是因为默认的字符串转换逻辑没有正确把locale应用到月份缩写上,下面给你两种可靠的解决方案:
方法1:使用DataWeave内置的format函数
DataWeave 1的date类型自带的format方法可以同时指定目标格式和locale,这是最简洁的实现方式:
%dw 1.0 %output application/json --- ('2021-01-12' as :date {format: 'yyyy-MM-dd'}) format('yyyy/MMM/dd', 'es')
这个表达式先把输入字符串解析成标准的date类型,再调用format方法传入西班牙语locale和目标格式,最终会输出你想要的"2021/ene/12"。
方法2:调用Java的SimpleDateFormat类
如果某些Mule版本的DataWeave内置方法存在locale支持的小问题,你可以直接调用Java的日期格式化类,兼容性更强:
%dw 1.0 %output application/json --- java.text.SimpleDateFormat.new('yyyy/MMM/dd', java.util.Locale.new('es')).format( ('2021-01-12' as :date {format: 'yyyy-MM-dd'} as java.util.Date) )
这里的逻辑是:先把DataWeave的date转成Java原生的Date对象,再创建一个指定西班牙语locale的SimpleDateFormat实例,最后用它来格式化日期,同样能得到正确的本地化结果。
为什么你之前的写法没起作用?
- 写法1:你虽然把字符串转成了指定locale的
date,但后续转string时没有传递locale参数,DataWeave会默认用系统locale,所以得到了英文的Jan。 - 写法2:DataWeave 1的
as :string{format: ..., locale: ...}语法里,locale参数并不总是能正确作用于月份缩写的本地化(这是DataWeave 1的一个已知局限性),所以需要用上面两种更可靠的方式。
内容的提问来源于stack exchange,提问作者Srvastav4
相关产品推荐
相关产品推荐

