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

时间:2016-02-26 13:51:50

标签: talend

我有一个数据库(不是SQL),时间字段都填充了本地时间。 我有一个带有UTC时间字段的数据库(SQL)。现在我想在这些数据库之间交换信息,但我只能实现这一点,如果我可以从本地时间转换为UTC,反之亦然。我怎样才能在Talend中实现这一目标?

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

Examples:
23-10-2015 16:00 Local time => 23-10-2015 14:00 UTC  (and vice versa)
26-10-2015 16:00 Local time => 26-10-2015 15:00 UTC  (and vice versa)

2 个答案:

答案 0 :(得分:2)

以下屏幕截图中有

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

tJavaRow_1 - 在localDateTime上执行Central / Europe到UTC时区对话并填充utcDateTime。这是唯一必不可少的部分。

tLogRow_1 - 显示结果

enter image description here

接下来,设置tFixedFlowInput的架构并添加一些数据 enter image description here

enter image description here

下一步...设置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 Job可以处理它们。

使用两个SimpleDateFormat实例,每个实例与一个时区相关联。 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只显示流量数据。以下是运行样本数据的示例。

enter image description here

答案 1 :(得分:1)

我需要以 UTC 格式获取当前日期。因此,我创建了一个日期类型和特定格式的列,如下所示:

enter image description here

在表达式 Builder 中我写了以下表达式:

TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", TalendDate.formatDateInUTC("yyyy-MM-dd HH:mm:ss", TalendDate.getCurrentDate()))

这就是我的解决方案!

另外,我发现如果你在另一个组件之后放置一个名为:tlogrow 的组件,你想看到它的输出 - 那会 tlogrow 做 -> 它会打印你在控制台每行的数据快照。这对调试非常有用。

我也在这里引导对话:https://community.talend.com/s/question/0D55b00006CvD7aCAF/return-utc-date-object

希望对大家有用!