Talend: 时区 java
Talend: Timezone java
我正在尝试学习 Talend Open Studio。我有一列包含“2019-09-17 08:42:09 +0400”之类的字符串,我想用 java 组件而不是 tmap 将其转换为日期时间,但将“+0400”添加到我的时间。我尝试了很多类似 LocalDate 的方法,但没有用。
如果有人知道怎么做,我将不胜感激it.Thanks。
要以给定格式解析日期,您可以使用 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
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);
此片段的输出是:
2019-09-17T08:42:09+04:00
如果您喜欢代码的简洁性,也可以只在一行中定义格式化程序:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss xx");
我喜欢重用 java.time 提供的构建块,这就是为什么我首先提供较长选项的原因。两种情况的结果是一样的。
LocalDate 不够
您提到您尝试过 LocalDate
。 LocalDate
是一个没有时间、没有时区或与 UTC 的偏移量的日期,因此它不能代表您问题中的日期和时间,这可能是您尝试失败的原因之一。
您的字符串包含日期、时间和 UTC 偏移量。 OffsetDateTime
是表示此信息的完全正确的 class。
+0400的偏移量表示与UTC时间相比增加了4小时0分钟的偏移量。因此,您的时间点相当于 2019-09-17T04:42:09Z,其中 Z
表示 UTC 或偏移量零。
Link
Oracle tutorial: Date Time 解释如何使用 java.time.
我正在尝试学习 Talend Open Studio。我有一列包含“2019-09-17 08:42:09 +0400”之类的字符串,我想用 java 组件而不是 tmap 将其转换为日期时间,但将“+0400”添加到我的时间。我尝试了很多类似 LocalDate 的方法,但没有用。
如果有人知道怎么做,我将不胜感激it.Thanks。
要以给定格式解析日期,您可以使用 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
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);
此片段的输出是:
2019-09-17T08:42:09+04:00
如果您喜欢代码的简洁性,也可以只在一行中定义格式化程序:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss xx");
我喜欢重用 java.time 提供的构建块,这就是为什么我首先提供较长选项的原因。两种情况的结果是一样的。
LocalDate 不够
您提到您尝试过 LocalDate
。 LocalDate
是一个没有时间、没有时区或与 UTC 的偏移量的日期,因此它不能代表您问题中的日期和时间,这可能是您尝试失败的原因之一。
您的字符串包含日期、时间和 UTC 偏移量。 OffsetDateTime
是表示此信息的完全正确的 class。
+0400的偏移量表示与UTC时间相比增加了4小时0分钟的偏移量。因此,您的时间点相当于 2019-09-17T04:42:09Z,其中 Z
表示 UTC 或偏移量零。
Link
Oracle tutorial: Date Time 解释如何使用 java.time.