Разбор форматированной строки даты в другом объекте TimeZone для даты не работает

Я пытаюсь преобразовать форматированную строку даты в объект Date. Дата Строка отформатирована в другой часовой пояс.

Когда я делаюsdf.parse(String) он возвращает мне мой объект системной даты.

Код как ниже,

static Date convertGMTTime(String timeZone, long longDate){
    Date convertedTime = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    try{
        Date date = new Date(longDate);
        System.out.println("timezone: "+timeZone +", timestamp: "+date);
        Locale locale = Locale.ENGLISH;
        TimeZone destTimeZone = TimeZone.getTimeZone(timeZone);// TimeZone.getDefault();
        System.out.println("Source timezone: "+destTimeZone);
/*          DateFormat formatter = DateFormat.getDateTimeInstance(
                    DateFormat.DEFAULT,
                    DateFormat.DEFAULT,
                    locale);
        formatter.setTimeZone(destTimeZone);*/
        sdf.setTimeZone(destTimeZone);
        String convertedDateStr = sdf.format(date);
        System.out.println("convertedDateStr: "+convertedDateStr);
        convertedTime = sdf.parse(convertedDateStr);
        System.out.println("convertedTime: "+convertedTime + "sdf: "+sdf.getTimeZone());
    }catch(Exception e){
        e.printStackTrace();
    }
    return convertedTime;
}

Буду признателен, если кто-нибудь может помочь и указать, где я иду не так. Заранее спасибо.

Выход:

timezone: Atlantic/Cape_Verde, timestamp: Tue Jun 26 17:38:11 IST 2012
Source timezone: sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]

convertedDateStr: 2012-06-26 11:08:11

convertedTime: Tue Jun 26 17:38:11 IST 2012
sdf:sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]

Еще несколько деталей, которыми можно поделиться. Когда я использую другой объект sdf (без установки часового пояса для него), он возвращает мне правильное время и дату, но часовой пояс по-прежнему выбирается из системных часов

Код

static Date convertGMTTime(String timeZone, long longDate){
    Date convertedTime = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat sdfParse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try{
        Date date = new Date(longDate);
        TimeZone destTimeZone = TimeZone.getTimeZone(timeZone);// TimeZone.getDefault();
        System.out.println("Source timezone: "+destTimeZone);
        sdf.setTimeZone(destTimeZone);
        String convertedDateStr = sdf.format(date);
        System.out.println("convertedDateStr: "+convertedDateStr );
        convertedTime = sdfParse.parse(convertedDateStr,new ParsePosition(0));
        System.out.println("convertedTime: "+convertedTime + "sdf: "+sdf.getTimeZone());
    }catch(Exception e){
        e.printStackTrace();
    }
    return convertedTime;
}

Выход

Source timezone: sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]

convertedDateStr: 2012-06-26 12:24:56

convertedTime: Tue Jun 26 12:24:56 IST 2012 

sdf: sun.util.calendar.ZoneInfo[id="Atlantic/Cape_Verde",offset=-3600000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]

Я понимаю, что, когда я не назначаю часовой пояс для sdf, требуется системный часовой пояс, но почему он не показывает время в системном часовом поясе? Я показываю это в часовом поясе, как это было в String, но часовой пояс отличается.

Кроме того, когда я устанавливаю часовой пояс, он возвращает объект даты в соответствии с моим системным временем, независимо от того, что в sdf установлен другой часовой пояс.

Может кто-нибудь, пожалуйста, объясните функциональное поведение для sdf.parse и sdf.format.

Для меня sdf.setTimeZone () оказывает влияние, когда мы используем формат, и аннулируется, когда мы используем sdf.parse (). Я нахожу это довольно странным.

Ценю помощь в этом отношении.

Ответы на вопрос(1)

Ваш ответ на вопрос