【问题标题】:Change timezone from undefined to utc in dataweave在dataweave中将时区从未定义更改为UTC
【发布时间】:2021-05-25 13:45:06
【问题描述】:

我有一个简单的日期/时间字符串(当地欧洲夏季/冬季时间),我想转换为 UTC。

我收到的日期是这样的

{"message": "2021-05-01 15:39"}

但是像这样使用 LocalDateTime

(payload.message as LocalDateTime  {format: "yyyy-MM-dd HH:mm"}  >> "UTC")

将提供“2021-05-01T15:49:00Z” - 虽然正确(分别是我想要的)它应该是“2021-05-01T13 :49:00Z"。

【问题讨论】:

    标签: dataweave anypoint-studio mulesoft


    【解决方案1】:

    一种解决方案是手动添加时区:

    %dw 2.0
    output application/json
    var value={"message": "2021-05-01 15:39"}
    ---
    (value.message ++ " CET") as DateTime  {format: "yyyy-MM-dd HH:mm zz"}  >> "UTC"
    

    输出:

    "2021-05-01T13:39:00Z"
    

    【讨论】:

      【解决方案2】:

      您无法将其直接解析为 DateTime(带有时间和时区的日期),因为您没有 TimeZone.. 因此,手动添加时区然后解析它,然后您可以转换时区到 UTC。

      (("$(payload.message) +02:00") as DateTime { format: "yyyy-MM-dd HH:mm ZZZZZ" }) >> "UTC"
      

      哪些输出:

      "2021-05-01T13:39:00Z"

      编辑:

      如果我们假设 mule 应用程序的时区与通过的日期时间的时区相匹配,并且我们想要动态地跟踪它,我们可以这样做:

      %dw 2.0
      output application/json
      fun currentUTCOffset() = now() as String { format: "ZZZ" }
      ---
      (("$(payload.message) $(currentUTCOffset())") as DateTime { format: "yyyy-MM-dd HH:mm ZZZ" }) >> "UTC"
      

      这就是为什么人们在传输时间时包含有关时区的信息如此重要的原因......当他们不这样做时解析会变得很棘手,尤其是在每年更改两次时区的地方。

      【讨论】:

      • 是的,我试过了,但是我必须手动处理夏季/冬季时间,不是吗?所以现在它是+02:00,但半年后它只会是+01:00。这是我想避免的 - 或者最终是否有一个 dw 函数来找出一年中的什么时候?
      • @maco 使用下面建议的命名时区是否适合您?不熟悉CET。编辑:我看了看,它看起来确实从 CET 到 CEST 振荡。运行 DataWeave 的机器是否在正确的时区?
      • 如果您执行 CET 和 CEST,它看起来仍然可以正确解析,这意味着 Aled 的解决方案也应该有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      相关资源
      最近更新 更多