Einleitung
Die Arbeit mit Datums- und Zeitangaben gehört zu den häufigsten Aufgaben in der modernen Entwicklung. Ob es um die Protokollierung von Ereignissen, die Berechnung von Fristen, die Anzeige eines Kalenders oder die Internationalisierung einer Anwendung geht – ein Kotlin-Entwickler muss in der Lage sein, zeitbezogene Daten korrekt zu verarbeiten. In diesem Artikel werden wir im Detail besprechen, wie man mit Datums- und Zeitangaben in Kotlin arbeitet, unter Verwendung der modernen API java.time, die seit Java 8 verfügbar und vollständig kompatibel mit Kotlin ist. Sie lernen die wichtigsten Klassen, Formatierung, Parsing, die Arbeit mit Zeitzonen und praktische Beispiele kennen, die Ihnen helfen, sauberen und zuverlässigen Code zu schreiben.
Wichtige Klassen für die Arbeit mit Datum und Zeit
In Kotlin, wie auch in Java, basiert die grundlegende Arbeit mit Datum und Zeit auf dem Paket java.time. Dieses Paket wurde entwickelt, um die veralteten java.util.Date und java.util.Calendar zu ersetzen. Es bietet unveränderliche (immutable) und threadsichere Klassen. Betrachten wir die wichtigsten davon.
LocalDate – Datum ohne Uhrzeit
Die Klasse LocalDate repräsentiert ein Datum (Jahr, Monat, Tag) ohne Berücksichtigung von Uhrzeit und Zeitzone. Ideal geeignet für Geburtstage, Feiertage oder Termindaten.
import java.time.LocalDate
fun main() { // Aktuelles Datum val today: LocalDate = LocalDate.now() println("Heute: $today") // Ausgabe: 2025-04-11
// Bestimmtes Datum val specificDate: LocalDate = LocalDate.of(2025, 12, 25) println("Weihnachten: $specificDate")
// Tage hinzufügen val nextWeek: LocalDate = today.plusDays(7) println("In einer Woche: $nextWeek")}LocalTime – Uhrzeit ohne Datum
Wenn Sie nur die Uhrzeit benötigen (Stunden, Minuten, Sekunden, Nanosekunden), verwenden Sie LocalTime.
import java.time.LocalTime
fun main() { val now: LocalTime = LocalTime.now() println("Aktuelle Uhrzeit: $now")
val meetingTime: LocalTime = LocalTime.of(14, 30) println("Besprechung um: $meetingTime")
val oneHourLater: LocalTime = now.plusHours(1) println("In einer Stunde: $oneHourLater")}LocalDateTime – Datum und Uhrzeit zusammen
Dies ist eine Kombination aus LocalDate und LocalTime. Die beliebteste Klasse zum Speichern eines Zeitpunkts ohne Bindung an eine Zeitzone.
import java.time.LocalDateTime
fun main() { val currentDateTime: LocalDateTime = LocalDateTime.now() println("Jetzt: $currentDateTime")
val newYear: LocalDateTime = LocalDateTime.of(2026, 1, 1, 0, 0) println("Neujahr: $newYear")}ZonedDateTime und Instant – Arbeit mit Zeitzonen
ZonedDateTime fügt LocalDateTime Informationen über die Zeitzone (ZoneId) hinzu. Instant repräsentiert einen Zeitpunkt in UTC (Maschinenzeit).
import java.time.ZonedDateTimeimport java.time.ZoneIdimport java.time.Instant
fun main() { // Uhrzeit in einer bestimmten Zeitzone val moscowTime: ZonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow")) println("Uhrzeit in Moskau: $moscowTime")
// Aktueller Zeitpunkt in UTC val instant: Instant = Instant.now() println("UTC-Zeitstempel: $instant")}Formatierung und Parsing von Daten
Für die Umwandlung eines Datums in einen String (Formatierung) und eines Strings in ein Datum (Parsing) wird die Klasse DateTimeFormatter verwendet. Sie ermöglicht die Angabe beliebiger Muster.
Formatierung eines Datums in einen String
import java.time.LocalDateimport java.time.format.DateTimeFormatter
fun main() { val date = LocalDate.now() val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy") val formattedDate: String = date.format(formatter) println("Formatiertes Datum: $formattedDate") // Ausgabe: 11.04.2025
// Weitere Beispiele für Muster val formatter2 = DateTimeFormat