Analisando Data String formatada em outro TimeZone até o objeto de data não funcionar

Eu estou tentando converter um String de data formatada para o objeto Date. A sequência de datas é formatada para outro fuso horário.

Quando eu façosdf.parse(String) ele me retorna meu objeto de data do sistema.

Código é como abaixo,

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;
}

Eu apreciaria se alguém pudesse ajudar e apontar onde estou indo errado. Desde já, obrigado.

Saída:

fuso horário: Atlantic / Cape_Verde, timestamp: ter Jun 26 17:38:11 IST 2012
Fuso horário de origem: sun.util.calendar.ZoneInfo [id = "Atlântico / Cabo_Verde", deslocamento = -3600000, dstSavings = 0, useDaylight = false, transições = 6, lastRule = null]

convertDateStr: 2012-06-26 11:08:11

convertTime: Ter Jun 26 17:38:11 IST 2012
sdf: sun.util.calendar.ZoneInfo [id = "Atlântico / Cabo_Verde", deslocamento = -3600000, dstSavings = 0, useDaylight = false, transições = 6, lastRule = null]

Alguns detalhes mais para compartilhar, quando eu uso outro objeto sdf (sem definir o fuso horário para ele), ele me retorna hora e data corretas, mas ainda fuso horário é escolhido do relógio do sistema

Código

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;
}

Saída

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]

Eu entendo que quando eu não atribuir fuso horário para sdf leva fuso horário do sistema, mas por que não mostrar hora no fuso horário do sistema? Eu mostro no fuso horário como estava em String, mas o fuso horário é diferente.

Ans quando eu definir o fuso horário ele retorna o objeto de data como por meu tempo de sistema, independentemente do fato de que sdf tem algum outro fuso horário definido.

Alguém pode explicar o comportamento funcional para sdf.parse e sdf.format.

Para mim sdf.setTimeZone () tem seu impacto quando usamos o formato e é anulado quando usamos sdf.parse (). Eu acho isso muito estranho.

Aprecie a ajuda nesse sentido.

questionAnswers(1)

yourAnswerToTheQuestion