SimpleDateFormat добавляет 1 час при преобразовании времени UTC в часовой пояс Австралии

Я использовал следующий код для преобразования времени UTC в текущее время часового пояса устройства. Он отлично работает по индийскому стандартному времени (IST). Но это добавляет 1 час дополнительно, если часовой пояс устройства — Сидней, Австралия.

Например, я задаю время UTC, например 2016-10-10T09:10:00, и оно преобразуется в 20:10, но на самом деле мне нужно 19:10. В чем проблема в моем коде?

public static String convertToLocalTimeFormat(String utcDateTimeString) {
    SimpleDateFormat simpleDateFormat;
    String formattedDateString = "";

    simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());

    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date parsedDateObject;
    try {
        parsedDateObject = simpleDateFormat.parse(utcDateTimeString);
        SimpleDateFormat expectedSimpleDateFormat = new SimpleDateFormat("hh:mm a", Locale.getDefault());
        formattedDateString = expectedSimpleDateFormat.format(parsedDateObject);
    } catch (ParseException e) {
        e.printStackTrace();
        return formattedDateString;
    }
    return formattedDateString;
}

person Ramprasad    schedule 15.09.2016    source источник
comment
летнее время?   -  person Tibrogargan    schedule 15.09.2016
comment
@Tibrogargan Да ... В настоящее время в Австралии стандартное восточное время Австралии, но указанная дата - октябрь ... поэтому после 1-й недели октября будет австралийское восточное летнее время. Таким образом, он добавляет 1 час. Но мне нужно показать то же самое время, что я ввожу сейчас.   -  person Ramprasad    schedule 15.09.2016


Ответы (1)


я бы посоветовал попробовать

System.out.println(expectedSimpleDateFormat.getTimeZone());

Чтобы убедиться, что все схемы перехода на летнее время верны на этом устройстве.

person Light    schedule 15.09.2016