Einführung in die Arbeit mit Datum und Uhrzeit in Kotlin
Die Arbeit mit Datum und Uhrzeit gehört zu den häufigsten Aufgaben in der modernen Softwareentwicklung. Ob es um das Protokollieren von Ereignissen, die Berechnung von Fristen, die Planung von Aufgaben oder die Darstellung von Benutzeroberflächen geht – ohne eine korrekte Handhabung von Zeitstempeln kommt man nicht aus. In Kotlin, das vollständig mit Java kompatibel ist, ist das Paket java.time, das mit Java 8 eingeführt wurde, der De-facto-Standard. Dieses Paket hat die veralteten java.util.Date und java.util.Calendar ersetzt und bietet eine threadsichere, unveränderliche und intuitiv verständliche API.
In diesem Artikel werden wir alle wesentlichen Aspekte der Arbeit mit Datum und Uhrzeit in Kotlin behandeln: von der Erstellung von Objekten über deren Formatierung und Parsing bis hin zur Durchführung arithmetischer Operationen. Sie erfahren, wie Sie LocalDate, LocalTime, LocalDateTime, Instant, Duration und Period anhand praktischer Beispiele einsetzen.
1. Grundlegende Klassen für die Arbeit mit Datum und Uhrzeit
Das Paket java.time enthält mehrere Schlüsselklassen, von denen jede eine bestimmte Aufgabe erfüllt. Betrachten wir sie genauer.
1.1 LocalDate – Arbeiten mit einem Datum ohne Uhrzeit
Die Klasse LocalDate repräsentiert ein Datum (Jahr, Monat, Tag) ohne Berücksichtigung von Uhrzeit und Zeitzone. Sie ist ideal für Geburtstage, Kalenderereignisse und Daten ohne Bindung an einen bestimmten Zeitpunkt.
import java.time.LocalDate
fun main() { // Aktuelles Datum val today = LocalDate.now() println("Heute: $today") // 2025-04-05
// Bestimmtes Datum val newYear = LocalDate.of(2025, 1, 1) println("Neujahr: $newYear")
// Parsing aus einem String val parsedDate = LocalDate.parse("2025-12-31") println("Geparstes Datum: $parsedDate")}1.2 LocalTime – Arbeiten mit einer Uhrzeit ohne Datum
LocalTime speichert nur die Uhrzeit (Stunden, Minuten, Sekunden, Nanosekunden). Es ist nützlich für die Speicherung von Arbeitsbeginnzeiten, Zeitplänen oder Timern.
import java.time.LocalTime
fun main() { // Aktuelle Uhrzeit val now = LocalTime.now() println("Jetzt: $now")
// Bestimmte Uhrzeit val meetingTime = LocalTime.of(14, 30, 0) println("Besprechungszeit: $meetingTime")
// Parsing val parsedTime = LocalTime.parse("09:15:30") println("Geparste Zeit: $parsedTime")}1.3 LocalDateTime – Kombination von Datum und Uhrzeit
LocalDateTime kombiniert LocalDate und LocalTime. Dies ist die am häufigsten verwendete Klasse zum Speichern eines Zeitpunkts ohne Zeitzone.
import java.time.LocalDateTime
fun main() { // Aktuelles Datum und Uhrzeit val current = LocalDateTime.now() println("Jetzt: $current")
// Erstellung aus Komponenten val specific = LocalDateTime.of(2025, 4, 5, 10, 30, 0) println("Bestimmter Zeitpunkt: $specific")
// Kombination von Datum und Uhrzeit val date = LocalDate.of(2025, 12, 25) val time = LocalTime.of(18, 0) val christmas = LocalDateTime.of(date, time) println("Weihnachten: $christmas")}1.4 Instant – Zeitpunkt in UTC
Instant repräsentiert einen Punkt auf der Zeitachse im Unix-Timestamp-Format (Anzahl der Sekunden und Nanosekunden seit dem 1. Januar 1970). Unverzichtbar für die Speicherung von Logs, die Arbeit mit Datenbanken und den Datenaustausch zwischen Systemen.
import java.time.Instant
fun main() { // Aktueller Zeitpunkt in UTC val now = Instant.now() println("Jetzt (UTC): $now")
// Aus Unix-Timestamp val fromEpoch = Instant.ofEpochSecond(1_700_000_000) println("Aus Timestamp: $fromEpoch")
// Konvertierung in Millisekunden val millis = now.toEpochMilli() println("Millisekunden: $millis")}2. Formatierung und Parsing von Datum und Uhrzeit
Zur Umwandlung von Daten in Zeichenketten