【问题标题】:How can I convert local time to UTC and vice versa in a Talend job如何在 Talend 作业中将本地时间转换为 UTC,反之亦然
【发布时间】:2016-02-26 13:51:50
【问题描述】:

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

我知道本地时间数据库中的数据,是荷兰的当地时间。 (GMT +1(冬季)与 GMT +2(夏季))

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)

【问题讨论】:

标签: talend


【解决方案1】:

下面的截图有一个

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 Basic Settings(真实代码)如下:

请注意,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 只显示流上的数据。这是使用示例数据运行的示例。

【讨论】:

  • 我试过了,但我得到了多个错误“导入 java.util.TimeZone 与另一个导入语句冲突”“方法 getTimeZone(String) 未定义 TimeZone 类型”“方法 setTimeZone(TimeZone ) 类型中的 DateFormat 不适用于参数 (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 完成了这项工作。有用。谢谢!!
【解决方案2】:

我需要以 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

我希望它对某人有用!

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2017-08-05
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多