Dataweave 2.0 - Невозможно привести строку к LocalDateTime

Я получаю CSV-файл с данными, которые преобразую в application / java.

Одно из полей (Creation_Date) - это поле DateTime, которое я получаю как String, потому что поле вывода является строковым типом.

Поле ввода: Creation_Date (String) - Пример: 2019-03-02 07: 00: 00.000

Поле вывода: CreatedDate (String) - Пример: 2019-03-02 08: 00: 00.000

Я использую этот код в своем преобразовании Dataweave 2.0, потому что хочу добавить еще один час к входной дате и времени:

CreatedDate: payload.Creation_date as LocalDateFormat {format: "yyyy-MM-dd HH:mm:ss+01:00"}

Но возвращает ошибку:

 Cannot coerce a String to a Localdatetime, caused by CreatedDate

person gtx911    schedule 16.04.2019    source источник


Ответы (2)


Чтобы добавить или изменить части данных, такие как добавление часов, вы должны преобразовать их в LocalDateTime, а затем использовать Period для добавления определенного периода времени к datetime. Также необходимо в миллисекундах отформатировать на основе ожидаемого ввода / вывода. Попробуйте это, но измените pretendPayload на полезную нагрузку для вашего примера:

%dw 2.0
output application/json
var pretendPayload = {Creation_date: "2019-03-02 07:00:00.000"}

type LocalDateFormat = LocalDateTime { format: "yyyy-MM-dd HH:mm:ss.SSS" }
---
{
    CreatedDate: (pretendPayload.Creation_date as LocalDateFormat + |PT1H|) as String{format: "yyyy-MM-dd HH:mm:ss.SSS" }
}

Информация о периоде здесь: https://docs.mulesoft.com/mule-runtime/4.1/dataweave-types#dw_type_dates_period

person Ryan Carter    schedule 17.04.2019

Вы можете использовать now () в dataweave 2.0. Проверьте URL: https://docs.mulesoft.com/mule-runtime/4.1/dw-core-functions-now.

Надеюсь, что это поможет вам.

person Raj    schedule 16.04.2019
comment
Кажется, gtx911 больше озабочен форматированием дат как строками, чем получением текущей даты. - person jerney; 17.04.2019