Releases: VladimirTintera/time
Release v1.0.3
π New Features & Improvements
- TimeZone in Formatting Scopes: Expanded all formatting scopes (e.g.
DateFormatScope,DateTimeFormatScope, etc.) to implementTimeZonedFormatScope. The currentTimeZoneis now directly accessible inside formatting scopes, allowing context-dependent formatting evaluations (such as convertingClock.System.now()toLocalDateTimedirectly inside a formatting builder block for conditional layouts). - Formatting DSL Builder Context: Propagated context parameters (
AppLocaleandTimeZone) into formatting DSL builder blocks. This enables calling context-aware functions (like.toLocalDateTime()) directly within the formatting builder lambdas.
π Documentation & Demos
- KDoc Improvements: Updated KDoc formatting examples in the context module to correctly reflect the dependency on the
TimeZonecontext.
βοΈ Under the Hood / Maintenance
- Build Configuration: Configured a descriptive
publicationNamefor NMCP (Nexus Publish) aggregation to improve the build and publishing pipeline.
Release v1.0.2
Release v1.0.2
This release brings support for the new Sonatype Central Portal publishing API, improves Kotlin/JS compatibility, resolves iOS linking issues on newer Xcode/iOS versions, and optimizes CI/CD pipeline stability.
π Features & Enhancements
- Kotlin/JS API Stability: Added
@JsNameannotations to functions in context modules to improve name preservation and prevent symbol clashes in JS/Wasm target builds. - First Day of Week API: Added a new context-aware
getFirstDayOfWeekwrapper in the:localemodule and updated README examples. - Java 11 Target Compatibility: Configured Java 11 compatibility via
jvmToolchainto ensure wide JVM target compatibility.
π Bug Fixes & Stability
- iOS Linker Resolution: Fixed Xcode 16.4/iOS 18.5 linking issues for Compose Multiplatform by overriding the minimum iOS SDK target to
18.0and disabling the Kotlin/Native compiler cache for the:sharedmodule. - Kotlin/JS Linker Resolution: Resolved Kotlin/JS IR compiler name-mangling and symbol collisions in
:time:core-contextand related modules. - Karma/Mocha Timeouts: Increased Mocha test execution and Karma activity timeouts for JS/Wasm browser tests to prevent premature failures when loading the IANA timezone database on slower CI runners.
- Gradle Cache Mismatches: Disabled Gradle build caching and prepended clean tasks on CI to avoid transient Kotlin/JS cache mismatch failures.
βοΈ Build & Maintenance
- Sonatype Central Portal Migration: Migrated the publishing pipeline to the modern Sonatype Central Portal API using
com.gradleup.nmcpaggregation. - Flexible PGP Signing: Made the GPG
signing.keyIdparameter optional in the publishing script to allow Gradle to auto-detect key IDs directly from the PGP private key data.
v1.0.1
Release Notes: v1.0.1
This release contains new API features, documentation updates, stability fixes, and complete CI/CD automation improvements.
π New Features & Improvements
- Context-Aware First Day of Week: Added a context-aware
getFirstDayOfWeek()helper function to determine the starting day of the week for a specific locale (fully integrated withAppLocale).
π Bug Fixes & Stability
- Dokka/Javadoc packaging: Resolved a critical publishing issue where Javadoc JARs did not contain generated Dokka HTML documentation, causing Maven Central validation failures.
- Build Tool Consistency: Fixed Gradle wrapper version discrepancies and unit test configuration issues to ensure reproducible builds across development and CI environments.
π Documentation & Demos
- README Improvements: Corrected usage examples in the README to ensure correctness.
- Interactive Demo & Docs: Rebuilt and published the web-based demo application and the public API documentation.
- Maintenance & Guidelines: Updated release agent instructions (
release_agent.mdand related files) for smoother automated deployment workflows.
βοΈ Under the Hood / Maintenance
- Gradle Refactor: Migrated the publishing configuration into a precompiled script plugin (
build-logic) for cleaner build scripts and better maintainability. - CI/CD Automation: Added a GitHub Actions workflow to automate library packaging (creating a local repository ZIP archive) and direct Maven Central staging.
- Publishing Controls: Secured the release workflow to restrict automated publishing actions to the official public repository.
Release v1.0.0
KMPTime v1.0.0 β Initial Release π
We are proud to announce the first official release of KMPTime, a lightweight, modular, and modern Kotlin Multiplatform date and time utility library. Built on top of kotlinx-datetime, KMPTime provides powerful formatting, locale representations, and context-aware wrappers.
Key Features
- Multiplatform from Day One: Native support for a wide range of platforms including JVM, Android, JS (Browser), Wasm-JS (Browser), and Apple platforms (iOS, macOS, tvOS, watchOS).
- Locale-Aware Formatting & Parsing: Simple yet flexible formatting and parsing capabilities for dates, times, and time zones using CLDR skeletons and patterns.
- Context Receivers Integration: Fully utilizes Kotlin's Context Receivers to seamlessly pass time zones or locales down the call stack without cluttering function parameters.
- Fully Documented & Tested: Includes complete API KDocs and comprehensive multiplatform test suites.
Module Structure
KMPTime is modularized so you only import what you need:
eu.tintera.locale:locale
Platform-independent representation and utilities for system and custom Locales.eu.tintera.time:time-core
Core multiplatform date/time utilities, extension functions, and calculations.eu.tintera.time:time-format
Locale-aware formatting and parsing utilities.eu.tintera.time:time-core-context
Context-receiver wrappers for core operations (e.g. locale-aware and timezone-aware context operations).eu.tintera.time:time-format-context
Context-receiver wrappers for formatting and parsing APIs.
Dependency Setup
Add the dependencies to your shared or platform-specific source sets in your build.gradle.kts:
kotlin {
sourceSets {
commonMain.dependencies {
// Core library modules
implementation("eu.tintera.locale:locale:1.0.0")
implementation("eu.tintera.time:time-core:1.0.0")
implementation("eu.tintera.time:time-format:1.0.0")
// Context receivers wrappers (Optional)
implementation("eu.tintera.time:time-core-context:1.0.0")
implementation("eu.tintera.time:time-format-context:1.0.0")
}
}
}