力拓蓝使用tSalesforceOutput使用UTC的日期
问题描述:
我有一组存储在我的数据库,UTC日期的时候我导入它们在Salesforce:力拓蓝使用tSalesforceOutput使用UTC的日期
- 如果我从我的计算机上运行的进口,他们得到错误的时区
- 如果我从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
我从来没有真正处理字符串。我从数据库中得到了一个java.util.Date(),并且在tMap的侧面有一个java.util.Date(),它向Salesforce方向发展,所以我不明白如何使用这个函数。我将不得不执行一个日期 - >字符串 - >字符串来获得转换工作并检索当前时区以将其传递给convertToGmt? – Edmondo1984
您可以尝试在命令行上通过-Duser.timezone =“UTC”的JVM级别强制时区,或者作为特定的JVM参数(选项卡Run> Advanced settings)强制执行时区。 – TRF
我希望我的工作能够在任何时区正常工作,而不是强迫我的程序在特定的时区执行 – Edmondo1984