我有一个数据库(不是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)
答案 0 :(得分:2)
以下屏幕截图中有
tFixedFlowInput_1 - 使用localDateTime(已填充)和utcDateTime(未填充)定义架构
tJavaRow_1 - 在localDateTime上执行Central / Europe到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 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只显示流量数据。以下是运行样本数据的示例。
答案 1 :(得分:1)
我需要以 UTC 格式获取当前日期。因此,我创建了一个日期类型和特定格式的列,如下所示:
在表达式 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
希望对大家有用!