Das Parsen einer formatierten Datumszeichenfolge in einem anderen TimeZone-to-Date-Objekt funktioniert nicht

Ich versuche, eine formatierte Datumszeichenfolge in ein Datumsobjekt zu konvertieren. Die Datumszeichenfolge ist in einer anderen Zeitzone formatiert.

Wenn ich es tuesdf.parse(String) es gibt mir mein Systemdatum Objekt zurück.

Code ist wie folgt,

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

Ich würde mich freuen, wenn jemand helfen und darauf hinweisen könnte, wo ich falsch liege. Danke im Voraus.

Ausgabe:

Zeitzone: Atlantic / Cape_Verde, Zeitstempel: Di Jun 26 17:38:11 IST 2012
Quell-Zeitzone: sun.util.calendar.ZoneInfo [id = "Atlantic / Cape_Verde", Offset = -3600000, dstSavings = 0, useDaylight = false, Übergänge = 6, lastRule = null]

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

convertTime: Di Jun 26 17:38:11 IST 2012
sdf: sun.util.calendar.ZoneInfo [id = "Atlantic / Cape_Verde", offset = -3600000, dstSavings = 0, useDaylight = false, übergänge = 6, lastRule = null]

Weitere Details zum Teilen. Wenn ich ein anderes sdf-Objekt verwende (ohne Zeitzone dafür festzulegen), werden Uhrzeit und Datum korrekt zurückgegeben, aber die Zeitzone wird immer noch von der Systemuhr übernommen

Code

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

Ausgabe

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]

Ich verstehe, dass die Systemzeitzone angezeigt wird, wenn ich der SDF keine Zeitzone zugebe. Warum wird die Zeit nicht in der Systemzeitzone angezeigt? Ich zeige es in der Zeitzone wie in String, aber die Zeitzone ist anders.

Wenn ich die Zeitzone einstelle, wird das Datumsobjekt gemäß meiner Systemzeit zurückgegeben, unabhängig von der Tatsache, dass für sdf eine andere Zeitzone festgelegt wurde.

Kann mir jemand bitte das Funktionsverhalten für sdf.parse und sdf.format erklären.

Für mich hat sdf.setTimeZone () Auswirkungen, wenn wir format verwenden, und es wird ungültig, wenn wir sdf.parse () verwenden. Ich finde es ziemlich seltsam.

Würdige Hilfe in dieser Hinsicht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage