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
- это дата без времени дня и без часового пояса или смещения от UT C, поэтому она не может представлять дату и время вашего вопроса, что может быть одной из причин, по которой ваши попытки не сработали.
В вашей строке есть дата, время дня и смещение UT C. OffsetDateTime
- это абсолютно правильный класс для представления этой информации.
Смещение +0400 означает, что к времени добавлено смещение 4 часа 0 минут по сравнению с UT C. Таким образом, ваша точка во времени эквивалентна 2019-09-17T04: 42: 09Z, где Z
обозначает UT C или смещение нуля.
Ссылка
Oracle учебник: Дата и время , объясняющие, как использовать java .time.