力拓蓝使用tSalesforceOutput使用UTC的日期

问题描述:

我有一组存储在我的数据库,UTC日期的时候我导入它们在Salesforce:力拓蓝使用tSalesforceOutput使用UTC的日期

  1. 如果我从我的计算机上运行的进口,他们得到错误的时区
  2. 如果我从UTC服务器运行导入,他们会得到正确的时区。

是使用当地时区的Talend/Salesforce API吗?我怎样才能防止这一点?

Salesforce会将datetime从用户时区转换为UTC,然后再存储它们。 为了避免任何问题,更简单的方法是将用于Salesforce连接的用户时区修复为GMT,并在调用任何tSalesforceOutputXxxx组件之前将每个日期时间显式转换为此时区。

这是一个例行你可以使用这个目的:

package routines; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

public class dateConversion { 

    public static String convertToGmt(String strDate, String timezone) throws Exception 
    { 
     if (strDate == null || timezone == null) 
      return null; 

     // Convert strDate from any valid TimeZone such as Europe/Paris to GMT 
     // strDate is expected to be formatted as "yyyy-MM-ddTHH:mm:ssZ" 
     SimpleDateFormat indfm = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
     indfm.setTimeZone(TimeZone.getTimeZone(timezone)); 
     Date inDate = indfm.parse(strDate); 

     SimpleDateFormat outdfm = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
     outdfm.setTimeZone(TimeZone.getTimeZone("GMT")); 

     String s = outdfm.format(inDate); 
     return s; 
    } 

} 

希望这有助于。

TRF

+0

我从来没有真正处理字符串。我从数据库中得到了一个java.util.Date(),并且在tMap的侧面有一个java.util.Date(),它向Salesforce方向发展,所以我不明白如何使用这个函数。我将不得不执行一个日期 - >字符串 - >字符串来获得转换工作并检索当前时区以将其传递给convertToGmt? – Edmondo1984

+0

您可以尝试在命令行上通过-Duser.timezone =“UTC”的JVM级别强制时区,或者作为特定的JVM参数(选项卡Run> Advanced settings)强制执行时区。 – TRF

+0

我希望我的工作能够在任何时区正常工作,而不是强迫我的程序在特定的时区执行 – Edmondo1984