Mule3阿拉伯语区域下日期格式获取错误问题咨询
你遇到的格式化异常是阿拉伯语作为RTL(从右至左书写)语言的本地化适配特性导致的:
绝大多数日期格式化工具在指定RTL地区locale时,会自动将格式调整为当地通用的日期书写顺序,阿拉伯地区通用日期顺序为
年/日/月,因此你指定的yyyy/MMM/dd会被默认替换为符合当地习惯的顺序,最终输出yyyy/dd/MM格式的结果。
解决方案
方案一:强制禁用本地格式自动调整
从你给出的语法判断你使用的是DataWeave脚本,可在格式化参数中增加localized: false配置,强制严格按照你指定的格式输出,不会被locale修改顺序,修改后的代码如下:%var newDate = '2045-12-20' as :date{format : "yyyy-MM-dd"} %var actualDate = newDate as :string{format : "yyyy/MMM/dd", locale :"ar", localized: false}方案二:拆分日期字段手动拼接
如果你的框架不支持关闭本地化调整,可以分别获取日期的三个部分单独处理后拼接,完全规避整体格式化的顺序调整问题:%var newDate = '2045-12-20' as :date{format : "yyyy-MM-dd"} %var arMonth = newDate.month as :string{format: "MMM", locale: "ar"} %var actualDate = "$(newDate.year)/$(arMonth)/$(newDate.day)"方案三:异常字符串转回日期的处理
如果你已经拿到了yyyy/dd/MM格式的阿拉伯语日期字符串,转回时需要指定匹配的格式和对应locale即可正常解析:%var parsedDate = actualDate as :date{format: "yyyy/dd/MMM", locale: "ar"}如果解析报错大概率是字符串中包含不可见的RTL控制字符,可先对字符串做预处理过滤掉非可见字符后再执行解析操作。
内容的提问来源于stack exchange,提问作者Srvastav4
相关产品推荐
相关产品推荐

