簡體   English   中英

如何在 DataWeave 中將帶時區的時間戳轉換為 LocalDateTime

[英]How to convert Timestamp with Time Zone to LocalDateTime in DataWeave

我正在嘗試使用 Mulesoft 將 object 從 Oracle 數據庫傳輸到 SQL 服務器數據庫。 其中一列是帶有時區的時間戳,但每當我傳輸它時,我都會收到此錯誤:

org.mule.runtime.core.internal.message.ErrorBuilder$ErrorImplementation

description=將數據類型 nvarchar 轉換為 datetimeoffset 時出錯。

errorType=DB:QUERY_EXECUTION
原因=org.mule.extension.db.api.exception.connection.QueryExecutionException errorMessage=-
childErrors=[]

我嘗試使用此解決方案,但仍然無法正常工作:

 payload.FILE_DATE_INSERT as String {format: "DD-MON-RR HH.MI.SSXFF AM TZR"} as LocalDateTime {format: "yyyy-MM-dd'T'HH:mm:ssZ"}

錯誤:

Cannot coerce Object { class: oracle.sql.TIMESTAMPTZ } (org.mule.weave.v2.module.pojo.reader.JavaBeanObjectValue@eb085528) to String

11| FILE_DATE_INSERT:payload.FILE_DATE_INSERT 作為字符串 {格式:“DD-MON-RR HH.MI.SSXFF AM TZR”} 作為 LocalDateTime {格式:“yyyy-MM-dd'T'HH:mm:ssZ”},

痕跡:

在 main(第 11 行,第 19 列)”評估表達式:“{ FILE_CODE:payload.FILE_CODE,FILECONTENTTYPE_CODE:payload.FILECONTENTTYPE_CODE,FILE_NAME:payload.FILE_NAME,FILE_SIZE:payload.FILE_SIZE,FILE_STATUS:payload.FILE_STATUS,USER_CODE:payload .USER_CODE,FILE_UPLOAD_CODE:payload.FILE_UPLOAD_CODE,FILE_UPLOAD_TEMP:payload.FILE_UPLOAD_TEMP,FILESTORAGE_CODE:payload.FILESTORAGE_CODE,FILE_DATE_INSERT:payload.FILE_DATE_INSERT as String {format:“DD-MON-RR HH.MI.SSXFF AM TZR”}作為LocalDateTime {format : "yyyy-MM-dd'T'HH:mm:ssZ"}, }"。錯誤類型:MULE:EXPRESSION 元素:DOC_TFILEMigrationFlow/processors/1/processors/0 @ DatabaseConnectorPOC:docLogic.xml:75(插入 DOC_TFILE ) 元素 XML: {調用 InsertIntoFile (:FILE_CODE,:FILECONTENTTYPE_CODE,:FILE_NAME,:FILE_SIZE,:FILE_STATUS,:USER_CODE,:FILE_UPLOAD_CODE, :FILE_UPLOAD_TEMP,:FILESTORAGE_CODE, FILE_DATE_INSERT)} #[{ E:payload.FILECONTENTTYPE_CODE,FILE_NAME:payload.FILE_NAME,FILE_SIZE:payload.FILE_SIZE,FILE_STATUS:payload.FILE_STATUS,USER_CODE:payload.USER_CODE,FILE_UPLOAD_CODE:payload.FILE_UPLOAD_CODE,FILE_UPLOAD_TEMP:payload.FILE_UPLOAD_TEMP,FILESTORAGE_CODE:payload.FILESTORAGE_CODE,FILE_DATE_INSERT: payload.FILE_DATE_INSERT as String {format: "DD-MON-RR HH.MI.SSXFF AM TZR"} as LocalDateTime {format: "yyyy-MM-dd'T'HH:mm:ssZ"}, }]

(為所有內容設置調試級別日志記錄或“-Dmule.verbose.exceptions=true”)


有誰知道如何使用 Dataweave 正確轉換它?

謝謝!

根據您提供的示例,您需要調整 dw 的格式,然后轉換為要重新格式化的字符串。 例如,

%dw 2.0
output application/json
---
"10-NOV-19 02.06.50.708000000 PM EUROPE/LONDON" as DateTime {format: "dd-MMM-yy hh.mm.ss.SSSSSSSSS a VV"} as String {format: "yyyy-MM-dd'T'HH:mm:ssZ"}

將 output

"2019-11-10T14:06:50+0000"

看,你正在做三重轉換 String -> LocalDateTime -> whatever_it_is_in_the_database

薄弱環節在此轉換的最后一站——DW/元數據對它的看法以及它在數據庫中的真實情況。

我可以建議在 Mule/DW 中轉換為字符串,然后在數據庫中將字符串轉換為 DB 所需的任何格式嗎?

至少您可以在一個地方控制和查看完全可理解的轉換(實際上在兩者中 - 在 DW 和 DB 中)。

https://simpleflatservice.com/mule4/AvoidCoversionsOrMakeThemNative.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM