SimpleDateFormat неправильно форматирует смещение даты и времени - PullRequest
1 голос
/ 22 октября 2019

Я получил метку времени следующим образом: 2019-10-17T07: 10: 39.021 + 10: 30, но когда я анализирую через SimpleDateFormat, а затем печатаю снова, он выглядит как 2019-10-17T07: 40: 39.021 + 11: 00

Похоже, это добавило 30 минут ко времени, а затем изменило часовой пояс. Есть ли способ исправить это.

        Date date = null;       
        String value = "2019-10-17T07:10:39.021+10:30";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.getDefault());       
        System.out.println("input :" + value);
        try {
            date = sdf.parse(value);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("output :" + sdf.format(date));

Результат

Ввод: 2019-10-17T07: 10: 39.021 + 10: 30

Выход: 2019-10-17T07: 40: 39.021 + 11: 00

Должен совпадать с вводом.

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

Строка даты 2019-10-17T07:10:39.021+10:30 состоит из смещения , поэтому из java-8 вы можете использовать OffsetDateTime

Дата-время ссмещение от UTC / Гринвич в календарной системе ISO-8601, например, 2007-12-03T10: 15: 30 + 01: 00.

OffsetDateTime dateTime = OffsetDateTime.parse(date);

System.out.println(dateTime.toString());   //2019-10-17T07:10:39.021+10:30
0 голосов
/ 22 октября 2019

Почему вы используете Locale.getDefault(), этот параметр не обязателен. Можете ли вы просто позвонить, как показано ниже,

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
...