问题描述
我正在尝试将日期格式化为以下格式,UTC 与时区偏移:
预期:
2021-01-20T21:00:00-06:00
实际:
2021-01-20T00:00:00-06:00
代码:
var arrivedAt = "2021-01-20T15:00:00"
var timezone = "America/Chicago"
var finalDateTime = (((arrivedAt as Date) as String {format: "yyyy-MM-dd'T'00:00:00"}) as LocalDateTime ++ (timezone as String))
我假设这是由于格式中的“00:00:00”,但是当我尝试使用“HH”或“hh”时,我收到了错误。
解决方法
好消息是它已记录在此处https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-change-time-zone
此示例代码为原始日期分配一个时区,然后将其转换为 UTC
var arrivedAt = "2021-01-20T15:00:00"
var timezone = "America/Chicago"
var dateWithTimezone = (arrivedAt as LocalDateTime) ++ "America/Chicago"
// dateWithTimezone = "2021-01-20T15:00:00-06:00"
var dateOnUTC = dateWithTimezone >> "UTC"
// dateOnUTC = "2021-01-20T21:00:00Z"
---
dateOnUTC as String { format: "yyyy-MM-dd'T'HH:mm:ssXXX"}
注意:我不确定问题的预期值是否正确,或者示例日期是否错误。
,您似乎使用了不正确的数据类型并尝试将日期转换为字符串。这是非常不明智的。错误可能是因为 Date 既没有时间也没有时区。
另一种方法是将日期时间视为 DateTime,以便能够使用时区功能:
%dw 2.0
output application/json
var arrivedAt = "2021-01-20T15:00:00"
var timezone = "America/Chicago"
var finalDateTime = (arrivedAt as DateTime >> timezone ) as String {format: "yyyy-MM-dd'T'HH:mm:ssZ"}
---
finalDateTime
输出
"2021-01-20T09:00:00-0600"
实际上,正确的小时数似乎是 9 而不是您预期的结果中的 21。也许你做了相反的时区转换?