Arbeiten mit Datum und Uhrzeit in Kotlin: fortgeschrittene Techniken und APIs

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Fortgeschrittene Arbeit mit Datum und Zeit in Kotlin



In der modernen Kotlin-Entwicklung geht die Arbeit mit Datum und Zeit weit über die bloße Anzeige des aktuellen Datums hinaus. Auf fortgeschrittenem Niveau müssen Zeitzonen berücksichtigt, komplexe Berechnungen mit Perioden durchgeführt, nicht standardisierte Formate geparst und Zeitstempel in verteilten Systemen verarbeitet werden. In diesem Artikel werden wir die wichtigsten Bibliotheken und Techniken betrachten, die Ihnen helfen, zuverlässigen und effizienten Code für die Arbeit mit Datum und Zeit in Kotlin zu schreiben.



1. Bibliotheksauswahl: java.time vs kotlinx-datetime



Kotlin ist vollständig kompatibel mit Java, daher können Sie die leistungsstarke java.time API (JSR-310) verwenden, die der Standard für neue Projekte ist. Für plattformübergreifende Projekte (KMP) ist jedoch kotlinx-datetime von JetBrains die bessere Wahl.



java.time (JVM)

Hauptklassen: LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant, Duration, Period.



import java.time.*

fun main() { val today = LocalDate.now() val meetingTime = LocalDateTime.of(2025, 3, 15, 14, 30) val zonedMeeting = ZonedDateTime.of(meetingTime, ZoneId.of("Europe/Moscow")) println("Meeting in Moscow: $zonedMeeting")}


kotlinx-datetime (Multiplattform)

Fügen Sie die Abhängigkeit in build.gradle.kts hinzu:

implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")


import kotlinx.datetime.*

fun main() { val now = Clock.System.now() val date = now.toLocalDateTime(TimeZone.of("Europe/Moscow")).date println("Today: $date")}


2. Parsen und Formatieren von Daten



Korrektes Parsen ist die Grundlage für die Arbeit mit externen Daten. Betrachten wir fortgeschrittene Techniken.



Parsen mit nicht standardisierten Formaten



import java.time.LocalDateTimeimport java.time.format.DateTimeFormatterimport java.time.format.DateTimeParseException

fun parseCustomDate(dateString: String): LocalDateTime? { val formatters = listOf( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"), DateTimeFormatter.ofPattern("dd/MM/yyyy'T'HH:mm"), DateTimeFormatter.ISO_LOCAL_DATE_TIME ) for (formatter in formatters) { try { return LocalDateTime.parse(dateString, formatter) } catch (e: DateTimeParseException) { // try the next one } } return null}

fun main() { println(parseCustomDate("2025-03-15 14:30:00")) // 2025-03-15T14:30 println(parseCustomDate("15/03/2025T14:30")) // 2025-03-15T14:30}


Lokalisiertes Formatieren



import java.time.LocalDateimport java.time.format.DateTimeFormatterimport java.time.format.FormatStyleimport java.util.Locale

fun main() { val date = LocalDate.of(2025, 3, 15) val usFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .withLocale(Locale.US) val ruFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .withLocale(Locale("ru")) println("USA: ${date.format(usFormatter)}") // Saturday, March 15, 2025 println("RU: ${date.format(ruFormatter)}") // суббота, 15 марта 2025 г.}


3. Komplexe Berechnungen mit Duration und Period



Duration — für präzise Zeitintervalle (Stunden, Minuten, Sekunden), Period — für Kalenderperioden (Jahre, Monate, Tage).



Differenz zwischen Daten unter Berücksichtigung der Geschäftslogik



import java.time.*import java.time.temporal.ChronoUnit

fun businessDaysBetween(start: LocalDate, end: LocalDate): Long { var count = 0L var current = start while (current.isBefore(end)) { if (current.dayOfWeek != DayOfWeek.SATURDAY && current.dayOfWeek != DayOfWe

Blogs

Buchempfehlungen