/ / Kalenderobjekt Zeitzonen-Konvertierung [Duplikat] - Java, Kalender, Zeitzone

Kalenderobjekt Zeitzonen-Konvertierung [duplizieren] - Java, Kalender, Zeitzone

Ich habe ein Kalenderobjekt, das in UTC-Zeit istZone. Ich möchte das Datum und die Uhrzeit in diesem Kalenderobjekt in PST umwandeln und dabei alle DST berücksichtigen. Ich freue mich darauf, eine Hilfsfunktion mit folgender Signatur zu schreiben:

private Calendar getPSTTime(Calendar utcTime)
{

}

Antworten:

1 für die Antwort № 1
private Calendar getPSTTime(Calendar utcTime)
{
TimeZone americaPacific = TimeZone.getTimeZone("America/Los_Angeles");
Calendar pacificTime = Calendar.getInstance(americaPacific);
pacificTime.setTime(utcTime.getTime());
return pacificTime;
}

FYI: Alle verfügbaren Zeitzonen-String-IDs werden von der Methode zurückgegeben TimeZone.getAvailableIDs(). Das habe ich bekommen "America/Los_Angeles" von.


0 für die Antwort № 2

Das Zeitereignis in Java wird in Millisekunden zwischen diesem Ereignis und dem 1. Januar 1970, 00:00:00 GMT, gespeichert (z. B. als ob es in London geschehen würde)

Wann immer wir Datum und Uhrzeit in Java sprechen, wie in java.util.Date oder java.util.Calendar dargestellt, sprechen wir immer über die absolute Zahl, unabhängig von der Zeitzone.

Zeitzone ist nur sinnvoll, wenn wir versuchen, Datum / Uhrzeit als Zeichenfolge auszugeben. Auf meinem Kopf kann ich mich an zwei Möglichkeiten erinnern:

  • Verwenden Sie Kalender, legen Sie die Zeitzone fest, verwenden Sie die Methode get (Calendar.XXX), um einzelne Datums- / Zeitkomponenten in der gewünschten Zeitzone abzurufen
  • Verwenden Sie SimpleDateTimeFormat, legen Sie die Zeitzone fest und formatieren Sie das gesamte Datum / die Uhrzeit in eine einzige Zeichenfolge in der gewünschten Zeitzone

In Java gibt es eigentlich keine "Zeitzonenumwandlung", aber es gibt Zeitzonen-spezifische Formatierungen.

Wenn Sie die Dinge jedoch wirklich verwirrend machen möchten, können Sie Ihrem Kalenderzeitwert die "Korrektur" hinzufügen, sodass Feldwerte wie in der PST-Zeitzone angezeigt werden:

private Calendar getPSTTime(Calendar utcTime)
{
TimeZone pstZ = TimeZone.getTimeZone("America/Los_Angeles");
long offset = pstZ.getOffset(utcTime.getTime());
Calendar pacificTime = Calendar.getInstance();
pacificTime.setTimeInMillis(utcTime.getTimeInMillis()-offset);
return pacificTime;
}