Skip to content

softartdev/Kronos-Multiplatform

Repository files navigation

Kronos Multiplatform Library

Maven Central Build & Publish CI/CD

Kotlin Multiplatform library for network time synchronization. It is an extension for the kotlinx-datetime library and supports the following platforms:

  • Android
  • iOS
  • Desktop JVM (MacOS, Linux, Windows)

Usage

kotlinx-datetime Extension

The library extends the main Clock interface of the kotlinx-library. You can use the Clock.Network class to retrieve the current network time, similar to using the built-in Clock.System instance.

val networkTime: Instant = Clock.Network.now()
val systemTime: Instant = Clock.System.now()
val diff: Duration = networkTime - systemTime

Synchronization

When running the application, it's necessary to synchronize the time with the network using the platform-specific code:

  • Android:
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        Clock.Network.sync(applicationContext)
    }
}
  • iOS:
@main
struct iosApp: App {
    init() {
        Clock.Network.sync()
    }
    var body: some Scene { ... }
}
  • Desktop JVM:
fun main() {
    Clock.Network.sync()
    ...
}

Installation

The latest release is available on Maven Central.

  1. Add the Maven Central repository if it is not already included:
repositories {
    mavenCentral()
}
  1. In multiplatform projects, add the following dependency to the commonMain source set dependencies:
commonMain {
    dependencies {
        implementation("io.github.softartdev:kronos:$latestVersion")
    }
}

Implementation

The main common interface is implemented using the following:

The project is built and tested using the following: