Таленд: часовой пояс java - PullRequest
       26

Таленд: часовой пояс java

0 голосов
/ 28 января 2020

Я пытаюсь выучить Talend Open Studio. У меня есть столбец со строками, такими как "2019-09-17 08:42:09 +0400", и я хочу преобразовать его с java компонентами, а не с tmap в datetime, но с добавленным к моему времени "+0400" , Я пробовал много вещей, таких как LocalDate, но это не сработало.

Пожалуйста, если кто-нибудь знает, как это сделать, я буду признателен. Большое спасибо.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Для разбора даты в заданном формате вы можете использовать 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
0 голосов
/ 29 января 2020

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...