Menu
Coddy logo textTech

Zeitzonenbehandlung

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

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

Erstellen Sie eine Zeit in einer bestimmten Zeitzone:

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

Sie können auch ein ZonedDateTime aus einem LocalDateTime mit .atZone() erstellen:

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

Zeit zwischen Zeitzonen konvertieren:

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

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

2024-03-15T10:30-04:00[America/New_York]
// Beispielhafte Ausgabe

Um ein ZonedDateTime zu formatieren, verwenden Sie DateTimeFormatter. Sie können den Zeitzonen-Offset in der Ausgabe mit dem Musterbuchstaben Z oder XXX einfügen:

// Ohne Offset
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

// Mit Offset (z. B. +09:00 oder -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm XXX");

String result = newYork.format(fmtWithOffset);
// Beispiel: 2024-03-15 10:30 -04:00
challenge icon

Aufgabe

Einfach

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

  1. Einen String (dateTimeStr) im Format "yyyy-MM-dd HH:mm"
  2. Einen String (sourceZone) für die Quell-Zeitzonen-ID
  3. Einen String (targetZone) für die Ziel-Zeitzonen-ID
  4. Einen Boolean (showOffset), der angibt, ob der Zeitzonen-Offset in der Ausgabe enthalten sein soll

Die Methode sollte:

  1. Das Eingabe-Datum und die Uhrzeit in der Quell-Zeitzone parsen
  2. Diese in die Ziel-Zeitzone konvertieren
  3. Formatierte Informationen über beide Zeiten zurückgeben

Die Rückgabemeldungen sollten wie folgt lauten:

  • Bei ungültigem Datum/Uhrzeit: Rückgabe "Invalid datetime format"
  • Bei ungültiger Zeitzone: Rückgabe "Invalid time zone"
  • Wenn showOffset wahr ist: Offset in die Ausgabe einbeziehen
  • Format: "Source: [time1], Target: [time2]"

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