Java-Zeitzone: Warum Offset benötigt wird

Meine Anforderung ist wie folgt:

Ich spare Zeit in Millisekunden in der Datenbank und in der Zeitzone. Zum Beispiel ist die Zeit in Millisekunden1223123123232 in lang und zeitzone istAsia/Calcutta. Ich muss es konvertierenAfrica/Asmara Zeitzone.

long l = 1223123123232l;
TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
long tzOff = tz.getOffset(l);
java.util.Date d = new Date(l-tzOff);   // WHY THIS??
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("Africa/Asmara"));// required timezone
String s = df.format(d);
System.out.println(s);

Um zu überprüfen, beziehe ich mich auf dieses:Verknüpfung

Meine Frage ist:

Wenn die Zeitzone nur die Darstellung der Zeit in verschiedenen Formaten ist (geografische Gebiete versetzt von GMT), warum muss ich die Versatzzeit von der tatsächlichen Zeit subtrahieren?(l-tzOff)?Warum kann ich die in der Datenbank gespeicherte Zeitzone nicht ignorieren und nur die Zeitzone berücksichtigen, in die ich das Datum konvertieren möchte?

So etwas wie:

long l = 1223123123232l;
java.util.Date d = new Date(l);
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("Africa/Asmara"));// required timezone
String s = df.format(d);
System.out.println(s);

Meine Systemzeitzone istAsia/CalcuttaIch möchte ein Datum in konvertierenAfrica/Bujumbura Zeitzone bisEurope/Vatican timezone.Der obige Code funktioniert in diesem Fall nicht? Warum ist das so?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage