Menu
CoddyTech

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 du mit verschiedenen Zeitzonen arbeitest oder zwischen ihnen umrechnest.

Erstelle eine Zeit in einer bestimmten Zeitzone:

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

Du kannst 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 umrechnen:

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

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

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

Um ein ZonedDateTime zu formatieren, verwende DateTimeFormatter. Füge den Offset mit dem Muster xxx hinzu: Es gibt +09:00 oder -04:00 aus und einen Offset von null als +00:00 (das großgeschriebene XXX gibt stattdessen Z für einen Offset von null aus):

// 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

Erstelle eine Methode namens convertTime, die vier Argumente entgegennimmt:

  1. Ein String (dateTimeStr) im Format "yyyy-MM-dd HH:mm"
  2. Ein String (sourceZone) als ID der Quellzeitzone
  3. Ein String (targetZone) als ID der Zielzeitzone
  4. Ein Boolean (showOffset), ob der Zeitzonenoffset in die Ausgabe aufgenommen werden soll

Die Methode soll:

  1. Die eingegebene Datetime in der Quellzeitzone parsen
  2. Sie in die Zielzeitzone umwandeln
  3. Formatierte Informationen zu beiden Zeitangaben zurückgeben

Die zurückzugebenden Meldungen sollen lauten:

  • Bei einer ungültigen Datetime: return "Invalid datetime format"
  • Bei einer ungültigen Zeitzone: return "Invalid time zone"
  • Wenn showOffset true ist: Den Offset in die Ausgabe aufnehmen, formatiert mit dem xxx-Muster, sodass ein Offset von null als +00:00 ausgegeben wird
  • 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

Übe selbstständig: Online-Java-Compiler