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

DataWeave DateTime转换报错:Unable to obtain ZonedDateTime from TemporalAccessor解决

问题解答

1. 单独时分秒转换DateTime报错的原因与解决

报错Unable to obtain ZonedDateTime from TemporalAccessor的核心原因:
DateTime类型要求包含日期、时间、时区/偏移的完整时间信息,而"08:05:30"仅包含时间部分,属于LocalTime类型,无法直接转为DateTime。

解决方式:

  • 仅处理时间场景:直接使用LocalTime类型
    "08:05:30" as LocalTime{format: "hh:mm:ss"} as String{format: "hh:mm:ss"}
    
  • 必须转为DateTime场景:补充日期和时区信息
    ("08:05:30" as LocalTime{format: "hh:mm:ss"} ++ |2023-10-18|) as DateTime{timezone: "GMT"} as String{format: "hh:mm:ss"}
    

2. 目标日期字符串转换的正确实现

针对将"Wed Oct 18 2023 08:05:30 GMT-0000 (GMT)"转换为"2023-10-18T08:05:30+00:00"(匹配你给出的目标格式),你的尝试代码存在格式符不匹配、未指定Locale的问题,正确实现如下:

%dw 2.0
output application/json
var inputDate = "Wed Oct 18 2023 08:05:30 GMT-0000 (GMT)"
---
inputDate as DateTime {
    format: "E MMM dd yyyy HH:mm:ss zX (z)",
    locale: "en_US"
} as String {
    format: "yyyy-MM-dd'T'HH:mm:ssXXX"
}

关键细节说明:

  • 解析格式符匹配:"E MMM dd yyyy HH:mm:ss zX (z)"完全对应输入字符串结构:
    • E:星期缩写(Wed)
    • MMM:月份缩写(Oct)
    • dd:日(18)
    • yyyy:年(2023)
    • HH:24小时制小时(输入无AM/PM标识,必须用HH而非hh)
    • z:时区标识(GMT)
    • X:±HHmm格式的偏移(-0000)
    • (z):匹配括号内的时区注释内容((GMT))
  • Locale指定:必须添加locale: "en_US",否则默认Locale无法解析英文的星期/月份缩写
  • 输出格式符:"yyyy-MM-dd'T'HH:mm:ssXXX"生成±HH:mm格式的时区偏移,完全符合目标格式要求

执行结果:

代码运行后输出:

"2023-10-18T08:05:30+00:00"

内容的提问来源于stack exchange,提问作者YannickN.fr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:34:55