Kotlin Multiplatform library for network time synchronization. It extends the kotlin.time API and supports the following platforms:
- Android
- iOS
- Desktop JVM (MacOS, Linux, Windows)
The library extends the main Clock interface from the standard library. You can use the Clock.Network class to retrieve the current network time, similar to using the built-in Clock.System instance.
import kotlin.time.Clock
import kotlin.time.Instant
import kotlin.time.Duration
val networkTime: Instant = Clock.Network.now()
val systemTime: Instant = Clock.System.now()
val diff: Duration = networkTime - systemTimeStarting from kotlinx-datetime 0.7.0, the Clock interface and Instant class were moved to the Kotlin standard library as kotlin.time.Clock and kotlin.time.Instant. The old types are now deprecated.
If your project still relies on them, replace the kotlinx.datetime.Clock and kotlinx.datetime.Instant imports with the corresponding kotlin.time ones. No other code changes are required.
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()
...
}The latest release is available on Maven Central.
- Add the Maven Central repository if it is not already included:
repositories {
mavenCentral()
}- In multiplatform projects, add the following dependency to the
commonMainsource set dependencies:
commonMain {
dependencies {
implementation("io.github.softartdev:kronos:$latestVersion")
}
}The main common interface is implemented using the following:
- lyft/Kronos for Java & Android
- MobileNativeFoundation/Kronos for iOS
The project is built and tested using the following:
- Swift Klib Gradle Plugin for including Swift source files in KMM shared module
- Compose Multiplatform, by JetBrains for UI samples