Skip to content

gazadge/Kronos

This branch is 3 commits behind MobileNativeFoundation/Kronos:main.

Folders and files

NameName
Last commit message
Last commit date
Jun 15, 2023
Dec 11, 2020
Apr 22, 2024
Mar 25, 2021
Apr 22, 2024
Jun 15, 2023
Jun 15, 2023
Jun 15, 2023
Apr 22, 2024
Sep 18, 2017
Jun 15, 2023
Jun 15, 2023
Jun 15, 2023
Mar 12, 2021
Apr 22, 2024
Mar 10, 2020
Jun 15, 2023
Jun 15, 2023
Apr 22, 2024
Jun 15, 2023
Jun 15, 2023

Repository files navigation

Kronos is an NTP client library written in Swift. It supports sub-seconds precision and provides a stable monotonic clock that won't be affected by changes in the clock.

Example app

This is an example app that displays the monotonic Clock.now on the left and the system clock (initially out of date) on the right.

ascii-clock

Usage

Sync clock using a pool of NTP servers

Calling Clock.sync will fire a bunch of NTP requests to up to 5 of the servers on the given NTP pool (default is time.apple.com). As soon as we get the first response, the given closure is called but the Clock will keep trying to get a more accurate response.

Clock.sync { date, offset in
    // This is the first sync (note that this is the fastest but not the
    // most accurate run
    print(date)
}

Get an NTP sync'ed date

Clock.now is a monotonic NSDate that won't be affected by clock changes.

NSTimer.scheduledTimerWithTimeInterval(1.0, target: self,
                                       selector: #selector(Example.tick),
                                       userInfo: nil, repeats: true)

@objc func tick() {
    print(Clock.now) // Note that this clock will get more accurate as
                     // more NTP servers respond.
}

Installation

Add Kronos to your Podfile:

pod 'Kronos'

Swift Package Manager

Add Kronos to your Pacakge.swift:

.package(name: "Kronos", url: "https://github.com/MobileNativeFoundation/Kronos.git", .upToNextMajor(from: "TAG")),

Bazel

Add Kronos to your WORKSPACE:

http_archive(
    name = "Kronos",
    sha256 = "",
    strip_prefix = "Kronos-TAG/",
    url = "https://github.com/MobileNativeFoundation/Kronos/archive/TAG.tar.gz",
)

Then depend on @Kronos//:Kronos

Android

Check out Kronos for Android

About

Elegant NTP date library in Swift

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 94.7%
  • Starlark 3.3%
  • Ruby 1.2%
  • Makefile 0.8%