【问题标题】:Talend: Timezone javaTalend:时区 java
【发布时间】:2020-05-13 16:51:11
【问题描述】:

我正在尝试学习 Talend Open Studio。我有一列包含“2019-09-17 08:42:09 +0400”之类的字符串,我想用 java 组件而不是 tmap 将其转换为日期时间,但将“+0400”添加到我的时间。我尝试了很多类似 LocalDate 的方法,但没有成功。

如果有人知道该怎么做,我将不胜感激。非常感谢。

【问题讨论】:

    标签: java datetime timezone talend


    【解决方案1】:

    要以给定格式解析日期,您可以使用SimpleDateFormat

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
        Date date = format.parse("2019-09-17 08:42:09 +0400"); // from string to date
        String dateAsString = format.format(date); // from date to string
    

    【讨论】:

    • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。当问题已经从java.time, the modern Java date and time API 中提到LocalDate 时,就更少了。
    【解决方案2】:

    java.time

        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .append(DateTimeFormatter.ISO_LOCAL_DATE)
                .appendLiteral(' ')
                .append(DateTimeFormatter.ISO_LOCAL_TIME)
                .appendLiteral(' ')
                .appendOffset("+HHmm", "+0000")
                .toFormatter();
    
        String stringFromTalendCol = "2019-09-17 08:42:09 +0400";
    
        OffsetDateTime javaDateTime = OffsetDateTime.parse(stringFromTalendCol, formatter);
    
        System.out.println(javaDateTime);
    

    这个 sn-p 的输出是:

    2019-09-17T08:42:09+04:00

    如果您希望代码简洁,也可以在一行中定义格式化程序:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss xx");
    

    我的喜好是重用 java.time 提供的构建块,这就是为什么我首先提出更长的选项。两种情况下的结果都是一样的。

    LocalDate 不够

    您提到您尝试过LocalDateLocalDate 是一个没有时间、没有时区或与 UTC 偏移的日期,因此它不能代表您问题中的日期和时间,这可能是您的尝试失败的原因之一。

    您的字符串包含日期、时间和 UTC 偏移量。 OffsetDateTime 是表示此信息的完全正确的类。

    +0400 的偏移量意味着与 UTC 相比,时间已添加了 4 小时 0 分钟的偏移量。所以你的时间点相当于 2019-09-17T04:42:09Z,其中Z 表示 UTC 或偏移量为零。

    链接

    Oracle tutorial: Date Time 解释如何使用 java.time。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多