强制Talend将UTC用于日期

强制Talend将UTC用于日期,talend,utc,Talend,Utc,当我使用TsaleForceOutput将日期导入Salesforce时,我的数据库中存储了一组UTC日期: 如果我从我的机器运行导入,他们会得到错误的时区 如果我从UTC格式的服务器上运行导入,它们将获得正确的时区 Talend/Salesforce API是否使用本地时区?如何防止这种情况发生?Salesforce会在存储日期时间之前,将日期时间从用户时区转换为UTC。 为了避免任何问题,更简单的方法是修复Salesforce连接到GMT时使用的用户时区,并在调用任何TsaleForceOu

当我使用TsaleForceOutput将日期导入Salesforce时,我的数据库中存储了一组UTC日期:

  • 如果我从我的机器运行导入,他们会得到错误的时区
  • 如果我从UTC格式的服务器上运行导入,它们将获得正确的时区

  • Talend/Salesforce API是否使用本地时区?如何防止这种情况发生?

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

    以下是一个可用于此目的的例程:

    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

    我从来没有真正处理过字符串。我从DB中得到了一个java.util.Date(),在tMap的一侧有一个java.util.Date(),它指向Salesforce,所以我不知道如何使用这个函数。我必须执行日期->字符串->字符串以使转换工作,并检索当前时区以将其传递给convertToGmt?您可以尝试在命令行上强制JVM级别的时区传递-Duser.timezone=“UTC”,或作为特定的JVM参数(选项卡运行>高级设置)。我希望我的工作在任何时区都能正常工作,而不是强制我的程序在特定时区执行。如果您想使用例程检索日期转换所需的时区,那么在tMap中只需编写dateConversion.convertToGmt(yourDate,yourTZ)之类的代码即可。这是我在数据迁移过程中使用的一种方法,其中每个记录的TZ根据其所有者的不同而不同。tMap左侧的我的日期来自MySQL,它存储在UTC中。我想知道转换发生在哪里,是MYSQL Talend组件吗?