Упрощенный формат часового пояса не конвертируется - PullRequest
0 голосов
/ 20 января 2019

В формате Java Simpleledate я не могу преобразовать в часовой пояс для IST.Вводимые мной данные приведены в формате UTC, но я хочу преобразовать их в IST.

        SimpleDateFormat format1 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = format1.parse("20-01-2019 13:24:56");
        TimeZone istTimeZone = TimeZone.getTimeZone("Asia/Kolkata");
        format2.setTimeZone(istTimeZone);
        String destDate = format2.format(date);
        System.out.println(destDate); //2019-01-20 13:24:56

Но для добавления IST необходимо добавить +5: 30.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Как сказано в другом ответе, вы не установили часовой пояс для format1. Вы также можете использовать пакет java.time для решения этой проблемы начиная с java8.

Поскольку 20-01-2019 13:24:56 не содержит информацию о часовом поясе, вы можете:

  1. разобрать как LocalDateTime.
  2. конвертировать LocalDateTime в ZonedDateTime в UTC.
  3. получить тот же момент в часовом поясе IST.

Пример:

DateTimeFormatter format1 = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

ZonedDateTime zonedDateTime = LocalDateTime
        .parse("20-01-2019 13:24:56", format1) // parse it without time zone
        .atZone(ZoneId.of("UTC")) // set time zone to UTC
        .withZoneSameInstant(ZoneId.of("Asia/Kolkata")); // convert UTC time to IST time

System.out.println(format2.format(zonedDateTime)); //2019-01-20 18:54:56
0 голосов
/ 20 января 2019

Я добавил вывод часового пояса и явное назначение часового пояса UTC для format1 в ваш код:

    SimpleDateFormat format1 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(format1.getTimeZone());
    TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
    format1.setTimeZone(utcTimeZone);
    Date date = format1.parse("20-01-2019 13:24:56");
    TimeZone istTimeZone = TimeZone.getTimeZone("Asia/Kolkata");
    format2.setTimeZone(istTimeZone);
    String destDate = format2.format(date);
    System.out.println(destDate); // 2019-01-20 13:24:56

Вы должны увидеть, что SimpleDateFormat по умолчанию использует ваш местный часовой пояс.Установка UTC явно должна работать.

...