You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:57:19