Menu
Coddy logo textTech

Zeitzonenbehandlung

Teil des Abschnitts Logik & Ablauf der Java-Journey von Coddy — Lektion 59 von 59.

ZonedDateTime in Java stellt ein Datum und eine Uhrzeit mit einer Zeitzone dar. Es ist nützlich, wenn man mit verschiedenen Zeitzonen arbeitet oder zwischen ihnen konvertiert.

Eine Zeit in einer spezifischen Zeitzone erstellen:

ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));

Sie können auch ein LocalDateTime in ein ZonedDateTime mit .atZone() umwandeln:

LocalDateTime local = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = local.atZone(ZoneId.of("Asia/Tokyo"));

.atZone() fügt einer bestehenden lokalen Datum-Uhrzeit eine Zeitzone hinzu und erzeugt ein ZonedDateTime.

Zeit zwischen Zeitzonen umwandeln:

ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));

Nach der Ausführung des obigen Codes enthält newYork denselben Instant wie tokyo, aber in der Zeitzone von New York:

2024-03-15T10:30-04:00[America/New_York]
// Example output

Um eine ZonedDateTime zu formatieren, verwenden Sie DateTimeFormatter. Das Mustersymbol Z oder xxx formatiert den UTC-Offset (z. B. +09:00), und VV formatiert die Zeitzonen-ID (z. B. Asia/Tokyo):

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = tokyo.format(formatter);
// Example: 2024-03-15 10:30 +09:00
challenge icon

Aufgabe

Einfach

Erstellen Sie eine Methode namens convertTime, die vier Argumente annimmt:

  1. Ein String (dateTimeStr) im Format "yyyy-MM-dd HH:mm"
  2. Ein String (sourceZone) Quell-Zeitzonen-ID
  3. Ein String (targetZone) Ziel-Zeitzonen-ID
  4. Ein boolean (showOffset), ob der Zeitzonen-Offset in der Ausgabe enthalten sein soll

Die Methode sollte:

  1. Die Eingabe-Datetime in der Quellzeitzone parsen
  2. Sie in die Zielzeitzone konvertieren
  3. Formatierte Informationen über beide Zeiten zurückgeben

Rückgabemeldungen sollten sein:

  • Bei ungültigem Datetime: return "Invalid datetime format"
  • Bei ungültiger Zone: return "Invalid time zone"
  • Wenn showOffset true ist: Offset in der Ausgabe einfügen
  • Format: "Source: [time1], Target: [time2]"

Spickzettel

ZonedDateTime stellt ein Datum und eine Uhrzeit mit einer Zeitzone dar, nützlich für die Arbeit mit verschiedenen Zeitzonen.

Erstellen Sie eine Uhrzeit in einer spezifischen Zone:

ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));

Konvertieren Sie eine LocalDateTime zu einer ZonedDateTime mit .atZone():

LocalDateTime local = LocalDateTime.now();
ZonedDateTime zoned = local.atZone(ZoneId.of("Asia/Tokyo"));

Uhrzeit zwischen Zonen konvertieren:

ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));

Formatieren Sie eine ZonedDateTime inklusive des UTC-Offsets mit Z oder xxx-Mustern:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = zoned.format(formatter);
// Beispiel: 2024-03-15 10:30 +09:00

Probier es selbst

import java.util.Scanner;
import java.time.*;
import java.time.format.*;

public class Main {
    public static String convertTime(String dateTimeStr, String sourceZone, 
                                   String targetZone, boolean showOffset) {
        // Schreibe deinen Code hier
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String dateTimeStr = scanner.nextLine();
        String sourceZone = scanner.nextLine();
        String targetZone = scanner.nextLine();
        boolean showOffset = Boolean.parseBoolean(scanner.nextLine());
        
        System.out.println(convertTime(dateTimeStr, sourceZone, targetZone, showOffset));
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf