Skip to content

Releases: VladimirTintera/time

Release v1.0.3

17 Jun 16:56

Choose a tag to compare

πŸš€ New Features & Improvements

  • TimeZone in Formatting Scopes: Expanded all formatting scopes (e.g. DateFormatScope, DateTimeFormatScope, etc.) to implement TimeZonedFormatScope. The current TimeZone is now directly accessible inside formatting scopes, allowing context-dependent formatting evaluations (such as converting Clock.System.now() to LocalDateTime directly inside a formatting builder block for conditional layouts).
  • Formatting DSL Builder Context: Propagated context parameters (AppLocale and TimeZone) 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 TimeZone context.

βš™οΈ Under the Hood / Maintenance

  • Build Configuration: Configured a descriptive publicationName for NMCP (Nexus Publish) aggregation to improve the build and publishing pipeline.

Release v1.0.2

12 Jun 21:35

Choose a tag to compare

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 @JsName annotations 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 getFirstDayOfWeek wrapper in the :locale module and updated README examples.
  • Java 11 Target Compatibility: Configured Java 11 compatibility via jvmToolchain to 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.0 and disabling the Kotlin/Native compiler cache for the :shared module.
  • Kotlin/JS Linker Resolution: Resolved Kotlin/JS IR compiler name-mangling and symbol collisions in :time:core-context and 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.nmcp aggregation.
  • Flexible PGP Signing: Made the GPG signing.keyId parameter optional in the publishing script to allow Gradle to auto-detect key IDs directly from the PGP private key data.

v1.0.1

09 Jun 19:00

Choose a tag to compare

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 with AppLocale).

πŸ› 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.md and 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

04 Jun 16:34

Choose a tag to compare

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:

  1. eu.tintera.locale:locale
    Platform-independent representation and utilities for system and custom Locales.
  2. eu.tintera.time:time-core
    Core multiplatform date/time utilities, extension functions, and calculations.
  3. eu.tintera.time:time-format
    Locale-aware formatting and parsing utilities.
  4. eu.tintera.time:time-core-context
    Context-receiver wrappers for core operations (e.g. locale-aware and timezone-aware context operations).
  5. 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")
        }
    }
}