使用DataWeave 1.0在Mule-3.8.4中转换为SalesForce日期时间格式

时间:2019-03-23 03:45:15

标签: java salesforce mule dataweave

我正在尝试将CS​​V中的datetime列转换为Salesforce日期时间格式以进行更新。我在mule-3.8.4 dataweave1.0中尝试了以下表达式,但出现错误。

我尝试了以下操作:

首次尝试

Test_Date: "1/14/19 6:31 PM" as :localdatetime { format: "M/dd/yy h:mm a" } as :localdatetime { format: "YYYY-MM-DD'T'hh:mm:ssZ" })

预期产量:2019-01-14T06:31:00Z

实际输出:美国东部时间2019年1月14日星期一18:31:00

在Salesforce中Upsert之后,它看起来像这样:2019-01-14T00:00:00.000+0000。这没有节省时间。


第二次尝试

Test_Date: "1/14/19 6:31 PM" as :localdatetime { format: "M/dd/yy h:mm a" } as :localdatetime { format: "YYYY-MM-DD'T'hh:mm:ss" })

预期产量:2019-01-14T06:31:00

实际输出:美国东部时间2019年1月14日星期一18:31:00

在Salesforce中Upsert之后,它看起来像这样:2019-01-14T00:00:00.000+0000。它仍然不能节省时间。

出什么问题了?

3 个答案:

答案 0 :(得分:0)

要格式化日期,从左到右读取的格式化模式需要匹配您的预期输出。因此,对于您的示例:

2019-01-14T06:31:00Z

yyyy-MM-dd'T'HH:mm:ssZ

y是年份 M代表月份(小写m代表分钟

d是一天

H是24小时制的小时。 (小写为12格式)

S是毫秒

Z是时区 如果需要,您可以配置更多的时区和毫秒。

以下是Salesforce日期格式信息:

https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/datafiles_date_format.htm

更多日期格式信息:

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

答案 1 :(得分:0)

您是否尝试过将其作为String发送到Salesforce?一旦某物的类型为LocalDateTime,就无法再对其进行格式化。格式化仅用于将String解析为LocalDateTime或将LocalDateTime的输出格式化为String的目的。例如:

"1/14/19 6:31 PM" 
  as :localdatetime { format: "M/dd/yy h:mm a" }         // This parses the string as LocalDateTime
  as :localdatetime { format: "YYYY-MM-DD'T'hh:mm:ssZ" } // This doesn't do anything, it's already LocalDateTime

如果您要使用一个表示日期时间的String并将其格式化为另一个表示相同日期时间的String,则可以执行以下操作:

...
%var inputFormat  = "M/dd/yy h:mm a"
%var outputFormat = "yyyy-MM-dd'T'HH:mm:ss"
---
"1/14/19 6:31 PM" 
  as :localdatetime { format: inputFormat  } // Used to parse the input string
  as :string        { format: outputFormat } // Used to format the output string

最后一个脚本的输出应为"2019-01-14T18:31:00"

答案 2 :(得分:0)

最后,下面的代码起作用了。 Mule Dataweave将以下格式(yyyy-MM-dd'T'HH:mm:ss.SSSZ)转换为java.util.Calendar对象。

测试日期:“ 1/22/19 6:31 PM”,如:localdatetime {格式:“ M / dd / yy h:mm a”“},如:datetime {格式:” yyyy-MM-dd'T'HH :mm:ss.SSSZ“})

这是有效载荷在DataWeave中转换消息之后的样子(以上步骤):

Test_Date = java.util.GregorianCalendar [time = ?, areFieldsSet = false,areAllFieldsSet = true,lenient = true,zone = sun.util.calendar.ZoneInfo [id =“ GMT”,offset = 0,dstSavings = 0 ,useDaylight = false,transitions = 0,lastRule = null],firstDayOfWeek = 1,minimumDaysInFirstWeek = 1,ERA = 1,YEAR = 2019,MONTH = 0,WEEK_OF_YEAR = 13,WEEK_OF_MONTH = 5,DAY_OF_MONTH = 22,DAY_OF_YEAR = 84, DAY_OF_WEEK = 2,DAY_OF_WEEK_IN_MONTH = 4,AM_PM = 1,HOUR = 4,HOUR_OF_DAY = 18,MINUTE = 31,SECOND = 0,MILLISECOND = 0,ZONE_OFFSET = 0,DST_OFFSET = 0]

在SalesForce中更新后的输出:2019-01-22T18:31:00.000 + 0000