https://github.com/seljabali/java-time-fun
java.time Kotlin extension functions library.
https://github.com/seljabali/java-time-fun
calendar date date-formatting date-library date-time java javatime joda-time kotlin kotlin-extensions
Last synced: 18 days ago
JSON representation
java.time Kotlin extension functions library.
- Host: GitHub
- URL: https://github.com/seljabali/java-time-fun
- Owner: seljabali
- License: mit
- Created: 2021-09-04T07:27:08.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-03-20T13:02:05.000Z (4 months ago)
- Last Synced: 2025-03-20T14:08:38.702Z (4 months ago)
- Topics: calendar, date, date-formatting, date-library, date-time, java, javatime, joda-time, kotlin, kotlin-extensions
- Language: Kotlin
- Homepage: https://seljabali.github.io/java-time-fun
- Size: 1.09 MB
- Stars: 61
- Watchers: 1
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-kotlin - Java Time Fun - Java.time Kotlin extension functions library. (Libraries)
- awesome-list - seljabali/java-time-fun - java.time Kotlin extension functions library. (Kotlin)
README
![]()
Java Time Fun
Java Time Kotlin extension functions.
```diff
- val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd")
- val date = LocalDate.parse(dateText, dateTimeFormatter)
+ val date = dateText.toLocalDate("yyyyMMdd")- val dateFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy")
- print(dateFormatter.format(date))
+ print(date.print("MM/dd/yyyy"))- if (ChronoUnit.YEARS.between(dateOfBirth, LocalDate.now()) < 18) {
+ if (dateOfBirth.getYearDifference(LocalDates.today) < 18) {- val zoneId = ZoneId.of("America/Los_Angeles")
+ val zoneId = ZoneIds.AMERICA_LOS_ANGELES
```## Features
### Parsing
_Convert strings into Java Time objects with ease_
```kotlin
val result = "01:30 AM".toLocalTime()
val result = "2021-06-07".toLocalDate()
val result = "06/07/2021".toLocalDate(format = "MM/dd/yyyy")
val result = "2024-11-15T12:34:56.123456Z".toLocalDateTime() // handles fractional seconds that Java Time doesn't
val result = "2021-10-04T10:10:00+0000".toZonedDateTime()
```
### Creation
_Create new date/time instances using factory functions_
```kotlin
val result = LocalTimeFactory.new(hour = 7, minute = 30)
val result = LocalDateFactory.new(year = 2024, month = 11, day = 15)
val result = LocalDateTimeFactory.new(year = 2024, month = 11, day = 15)
val result = ZonedDateTimeFactory.new(year = 2024, month = 11, day = 15, zoneId = ZoneIds.AMERICA_LOS_ANGELES)
```### Conversion from Legacy Date Types
_Easily convert legacy date objects to Java Time_
```kotlin
val result = Date().toLocalDateTime()
val result = GregorianCalendar().toZonedDateTime()
```### Comparisons
_Compare dates and times at various granularities_
```kotlin
// Year
val result = dateA.compareYear(dateB)
val result = dateA.isBeforeYear(dateB)// Month
val result = dateA.compareMonth(dateB)
val result = zonedDateA.getMonthDifference(zonedDateB) // auto-conversion to same time zone for expected results
val result = dateA.isEqualMonth(dateB)// Day
val result = dateA.compareDay(dateB)
val result = dateA.getDayDifference(dateB)
val result = dateA.isAfterEqualDay(dateB)// Time
val result = dateA.compareTime(dateB)
val result = dateA.getMinuteDifference(dateB)
val result = dateA.isAfterEqualTime(dateB)
```### Formatting
_Print dates and times using a custom format_
```kotlin
val date = "2021-07-06".toZonedDateTime()
val result = date.print(format = "MM/dd/yyyy")
```### Attributes & Mutations
_Query and transform date/time attributes_
```kotlin
val result = date.isAtStartOfDay()
val result = date.getDaysInMonth()val result = date.atStartOfDay()
val result = date.getLast(DayOfWeek.FRIDAY)
val result = date.getNext(DayOfWeek.MONDAY)
```### Preset Dates
_Quickly access commonly used dates_
```kotlin
val result = LocalDates.startOfYear()
val result = LocalDateTimes.tomorrow()
val result = ZonedDateTimes.nextMonday()
```## Installation
Add the following to your module’s `build.gradle`:
```gradle
repositories {
mavenCentral()
}dependencies {
implementation("org.eljabali.sami.javatimefun:javatimefun:4.0.1")
}
```For Android
In addition to the above, you need to desugar your module:
- Ensure you're using [Gradle Plugin](https://developer.android.com/studio/releases/gradle-plugin#updating-plugin) 4.0.0+.
- Update module `build.gradle`:
```gradle
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}
```
For more information on Android desugaring click [here](https://developer.android.com/studio/write/java8-support#library-desugaring).## Find this library useful? 😏
If you like what you see, please star the repository __[as others have](https://github.com/seljabali/java-time-fun/stargazers)__! ⭐️