Skip to content

sami-eljabali/kotlinx-datetime-fun

Repository files navigation

SwiftDate

Kotlinx DateTime Fun

Every kotlinx.datetime extension function you'll ever need.

Build Status Maven Central Kotlin


- val localDateFormat = LocalDate.Format {
-     byUnicodePattern("dd/MM/yyyy")
- }
- val date = LocalDate.parse("11/15/2024", localDateFormat)
+ val date = "11/15/2024".toLocaldate("dd/MM/yyyy")

- val dateFormat = LocalDate.Format {
-     byUnicodePattern("dd/MM/yyyy")
- }
- print(dateFormat.format(date))
+ print(date.print("MM/dd/yyyy"))

- val result = date.plus(days * -1, DateTimeUnit.DAY)
+ val result = date.minusDays(days)

Platforms

JVM · Android · iOS · JS (browser & Node.js) · WASM (browser & Node.js)

Features

Parsing

Convert strings into Kotlinx DateTime objects with ease

val result = "01:30 AM".toLocaltime()
val result = "2021-06-07".toLocaldate()
val result = "06/07/2021".toLocaldate("MM/dd/yyyy")
val result = "06/07/2021".toLocaldate("MM/dd/yyyy", "yyyy-MM-dd") // fall back parsing formats
val result = "2024-11-15T12:34:56.123456Z".toLocalDatetime() // handles fractional seconds that Kotlinx DateTime doesn't

Comparisons

Compare dates and times at various granularities

// Year
val result = dateA.compareYear(dateB)
val result = dateA.isBeforeYear(dateB)

// Month
val result = dateA.compareMonth(dateB)
val result = dateA.getMonthDifference(dateB)
val result = dateA.isEqualMonth(dateB)

// Day
val result = dateA.compareDay(dateB)
val result = dateA.getDayDifference(dateB)
val result = dateA.isAfterEqualDay(dateB)

Formatting

Print dates and times using a custom format

val date = "2021-07-06".toLocaldate()
val result = date.print("MM/dd/yyyy")

Attributes

Query date/time properties

// LocalDate
val result = date.isWeekend()
val result = date.isWeekday()
val result = date.isInLeapYear()
val result = date.getDaysInMonth()
val result = date.getMonthBaseZero()

// LocalTime
val result = time.isAtStartOfDay()
val result = time.isAtEndOfDay()
val result = time.isAtNoon()
val result = time.isInAm()
val result = time.isInPm()

Mutations

Add, subtract, and set fields

// Date arithmetic
val result = date.plusDays(3)
val result = date.minusMinutes(2)
val result = date.plusSeconds(1)

// Field setters
val result = date.withYear(2025)
val result = date.withMonth(6)
val result = dateTime.withHour(9)

// Boundaries
val result = date.atStartOfDay()
val result = date.atEndOfDay()
val result = date.atStartOfMonth()
val result = date.atEndOfMonth()

// Navigation
val result = date.getLast(DayOfWeek.FRIDAY)
val result = date.getNext(DayOfWeek.MONDAY)

Time Zone Conversion

Convert between time zones

val result = dateTime.fromZoneToZone(ZoneIds.AMERICA_NEW_YORK, ZoneIds.ASIA_TOKYO)
val result = dateTime.fromUtcToZone(ZoneIds.EUROPE_LONDON)
val result = dateTime.fromZoneToUtc(ZoneIds.AMERICA_LOS_ANGELES)

Preset Dates

Quickly access commonly used dates

// Now
val result = LocalTime.now()
val result = LocalDate.now()
val result = LocalDateTime.now()
val result = LocalDateTime.now(ZoneIds.AMERICA_LOS_ANGELES)

// Relative days
val result = LocalDate.yesterday()
val result = LocalDate.today()
val result = LocalDate.tomorrow()

// Day-of-week shortcuts
val result = LocalDate.lastFriday()
val result = LocalDate.nextMonday()
val result = LocalDateTime.lastSunday()
val result = LocalDateTime.nextWednesday()

// Period boundaries
val result = LocalDate.startOfYear()
val result = LocalDate.endOfYear()
val result = LocalDate.startOfMonth()
val result = LocalDate.endOfMonth()

Installation

Add the following to your module's build.gradle:

repositories {
  mavenCentral()
}

dependencies {
  implementation("org.eljabali.sami.kotlinxdatetimefun:kotlinxdatetimefun:0.0.9")
}

😏 Find this library useful?

Star this repository as others have. ⭐️

🍪 Extras