在Talend作业中,如何将本地时间转换为UTC,反之亦然

在Talend作业中,如何将本地时间转换为UTC,反之亦然,talend,Talend,我有一个数据库(不是SQL),它的时间字段都是本地时间。 我有一个数据库(SQL),其中的时间字段是UTC。现在,我想在这些数据库之间交换信息,但我只能实现这一点,如果我能将本地时间转换为UTC,反之亦然。我如何才能在Talend实现这一点 我知道当地时间数据库中的数据,是荷兰的当地时间。(格林尼治标准时间+1(冬季)或格林尼治标准时间+2(夏季)) 下面的屏幕截图有一个 tFixedFlowInput_1-使用localDateTime(已填充)和utcDateTime(未填充)定义架构 tJ

我有一个数据库(不是SQL),它的时间字段都是本地时间。 我有一个数据库(SQL),其中的时间字段是UTC。现在,我想在这些数据库之间交换信息,但我只能实现这一点,如果我能将本地时间转换为UTC,反之亦然。我如何才能在Talend实现这一点

我知道当地时间数据库中的数据,是荷兰的当地时间。(格林尼治标准时间+1(冬季)或格林尼治标准时间+2(夏季))


下面的屏幕截图有一个

tFixedFlowInput_1-使用localDateTime(已填充)和utcDateTime(未填充)定义架构

tJavaRow_1-在localDateTime上执行中欧至UTC时区对话,并填充utcDateTime。这是唯一必要的部分

tLogRow_1-显示结果

接下来,为tFixedFlowInput设置模式并添加一些数据

接下来。。。设置tJavaRow_1组件

tJavaRow_1高级设置/导入如下:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.text.ParseException;
tJavaRow_1基本设置(实际代码)如下:

请注意,try和catch块已注释掉,以便抛出异常,Talend作业可以处理它们

使用了两个SimpleDataFormat实例,每个实例都与时区关联。 localDateTime通过源格式化程序进行解析。然后,使用目标格式化程序将日期转换为UTC,并以原始格式作为字符串返回。从UTC返回本地是一个微不足道的变化

String BASE_FORMAT = "dd-MM-yyyy HH:mm";
TimeZone utcTZ = TimeZone.getTimeZone("UTC");
TimeZone ceTZ = TimeZone.getTimeZone("Europe/Amsterdam");

SimpleDateFormat formatUTC = new SimpleDateFormat( BASE_FORMAT );
formatUTC.setTimeZone(utcTZ);

SimpleDateFormat formatCE = new SimpleDateFormat( BASE_FORMAT );
formatCE.setTimeZone(ceTZ); 

output_row.localDateTime = input_row.localDateTime;

// Commented out the try and catch, so the exception is thrown to Talend job
//try {
    Date dateTimeLocal = formatCE.parse(input_row.localDateTime);
    output_row.utcDateTime = formatUTC.format(dateTimeLocal);
//}       
//catch (ParseException pe) {
//  System.out.println( pe.getMessage());
//}
接下来,tLogRow_1只显示流上的数据。下面是一个使用示例数据运行的示例


下面的屏幕截图有一个

tFixedFlowInput_1-使用localDateTime(已填充)和utcDateTime(未填充)定义架构

tJavaRow_1-在localDateTime上执行中欧至UTC时区对话,并填充utcDateTime。这是唯一必要的部分

tLogRow_1-显示结果

接下来,为tFixedFlowInput设置模式并添加一些数据

接下来。。。设置tJavaRow_1组件

tJavaRow_1高级设置/导入如下:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.text.ParseException;
tJavaRow_1基本设置(实际代码)如下:

请注意,try和catch块已注释掉,以便抛出异常,Talend作业可以处理它们

使用了两个SimpleDataFormat实例,每个实例都与时区关联。 localDateTime通过源格式化程序进行解析。然后,使用目标格式化程序将日期转换为UTC,并以原始格式作为字符串返回。从UTC返回本地是一个微不足道的变化

String BASE_FORMAT = "dd-MM-yyyy HH:mm";
TimeZone utcTZ = TimeZone.getTimeZone("UTC");
TimeZone ceTZ = TimeZone.getTimeZone("Europe/Amsterdam");

SimpleDateFormat formatUTC = new SimpleDateFormat( BASE_FORMAT );
formatUTC.setTimeZone(utcTZ);

SimpleDateFormat formatCE = new SimpleDateFormat( BASE_FORMAT );
formatCE.setTimeZone(ceTZ); 

output_row.localDateTime = input_row.localDateTime;

// Commented out the try and catch, so the exception is thrown to Talend job
//try {
    Date dateTimeLocal = formatCE.parse(input_row.localDateTime);
    output_row.utcDateTime = formatUTC.format(dateTimeLocal);
//}       
//catch (ParseException pe) {
//  System.out.println( pe.getMessage());
//}
接下来,tLogRow_1只显示流上的数据。下面是一个使用示例数据运行的示例


也许这对你有帮助。也许这能帮你。我尝试了,但我得到了多个错误“Import java.util.TimeZone与另一个Import语句冲突”“类型TimeZone的方法getTimeZone(String)未定义”“类型DateFormat中的方法setTimeZone(TimeZone)不适用于参数(TimeZone)”,这在Talend 6.1.1和java 1.8中有效。您使用的是什么版本的Java?我还可以在今天晚些时候提供下载示例项目的链接。这两个版本都是旧版本。我将更新它们并重试。Java 1.7.0_21(我无法更新此版本,一些公司软件与较新的Java版本不兼容)Talend V5.1.2,我可以升级到6.1.1升级到Talend 6.1.1。它起作用了。非常感谢。我尝试了,但我得到了多个错误“Import java.util.TimeZone与另一个Import语句冲突”“类型TimeZone的方法getTimeZone(String)未定义”“类型DateFormat中的方法setTimeZone(TimeZone)不适用于参数(TimeZone)”,这在Talend 6.1.1和java 1.8中有效。您使用的是什么版本的Java?我还可以在今天晚些时候提供下载示例项目的链接。这两个版本都是旧版本。我将更新它们并重试。Java 1.7.0_21(我无法更新此版本,一些公司软件与较新的Java版本不兼容)Talend V5.1.2,我可以升级到6.1.1升级到Talend 6.1.1。它起作用了。非常感谢。