2017-04-13 51 views
0

我有一組存儲在我的數據庫,UTC日期的時候我導入它們在Salesforce:力拓藍使用tSalesforceOutput使用UTC的日期

  1. 如果我從我的計算機上運行的進口,他們得到錯誤的時區
  2. 如果我從UTC服務器運行導入,他們會得到正確的時區。

是使用當地時區的Talend/Salesforce API嗎?我怎樣才能防止這一點?

回答

0

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

相關問題