Преобразование временных меток с нулевым зонированием Mulesoft Dataweave

#datetime #dataweave #mulesoft

#дата и время #dataweave #mulesoft

Вопрос:

Я хочу преобразовать поле Datetime в ZonedDateTime, но с нулевой временной меткой. У меня есть функция, подобная приведенной ниже —

 fun dateInSecToDateTimePST(d : String) = if (d != null)
                            (d as Number as DateTime {unit: "seconds"} >> "CST")
                        else null
 

Результатом этого является

 2020-11-20T21:30:00-06:00
 

Но результат, который я ожидаю, выглядит следующим образом-

 2020-11-20T00:00:00-06:00
 

Временная метка всегда будет оставаться нулевой, но со смещением. Есть предложения? Я использую %dw 2.0 и Mule4

Ответ №1:

С помощью типов даты и времени вы можете разбить ввод даты и времени и объединить его обратно вместе с обнуленной временной частью следующим образом:

 %dw 2.0
output application/json
fun dateInSecToDateTimePST(d : String) = do { 
    var date = (d as Number as DateTime {unit: "seconds"}) as Date
    var time = "00:00:00" as Time
    var zone = "CST" as TimeZone
    ---
    if (d != null)
        date    time    zone
    else null
}
---
dateInSecToDateTimePST(payload.time)
 

при необходимости часовой пояс также может быть динамическим.