DataWeave中多格式时区时间转UTC的实现方法
DataWeave 实现三种时区格式转UTC时间
完全不用依赖第三方库,DataWeave自带的日期时间处理能力就能搞定这三种格式转UTC的需求,下面分场景给你具体实现代码:
场景1:日期时间与时区缩写分开
比如输入是 { "dt": "2022-01-20T15:00:00", "tz": "CST" },先把日期字符串结合时区转成带时区的DateTime,再转成UTC格式:
%dw 2.0 output application/json --- (payload.dt as DateTime {timezone: payload.tz}) as String {format: "uuuu-MM-dd'T'HH:mm:ss'Z'", timezone: "UTC"}
场景2:带时区偏移的日期时间字符串
比如输入是 "2022-01-20T15:00:00+05:30",这种格式本身包含时区偏移,直接转成DateTime后再转UTC即可:
%dw 2.0 output application/json --- ($ as DateTime) as String {format: "uuuu-MM-dd'T'HH:mm:ss'Z'", timezone: "UTC"}
场景3:日期时间与IANA时区分开
比如输入是 { "dt": "2022-01-20T15:00:00", "tz": "Asia/Calcutta" },处理逻辑和场景1一致,IANA时区的解析更准确(推荐优先用这种,避免时区缩写的歧义):
%dw 2.0 output application/json --- (payload.dt as DateTime {timezone: payload.tz}) as String {format: "uuuu-MM-dd'T'HH:mm:ss'Z'", timezone: "UTC"}
综合处理不同格式的通用函数
如果输入可能混合这三种格式,可以封装一个通用函数来统一处理:
%dw 2.0 output application/json fun toUTC(dt: String, tz: String = "") = if (dt contains "+" or dt contains "-") (dt as DateTime) as String {format: "uuuu-MM-dd'T'HH:mm:ss'Z'", timezone: "UTC"} else if (tz != "") (dt as DateTime {timezone: tz}) as String {format: "uuuu-MM-dd'T'HH:mm:ss'Z'", timezone: "UTC"} else error("Missing timezone information") --- // 测试不同输入场景 { case1: toUTC("2022-01-20T15:00:00", "CST"), case2: toUTC("2022-01-20T15:00:00+05:30"), case3: toUTC("2022-01-20T15:00:00", "Asia/Calcutta") }
内容的提问来源于stack exchange,提问作者PiriyaS
相关产品推荐
相关产品推荐

