All Projects → tidwall → rtime

tidwall / rtime

Licence: MIT License
Retrieve the current time from remote servers

Programming Languages

go
31211 projects - #10 most used programming language

rtime

GoDoc

Retrieve the current time from remote servers.

It works by requesting timestamps from twelve very popular hosts over https. As soon as it gets at least three responses, it takes the two that have the smallest difference in time. And from those two it picks the one that is the oldest. Finally it ensures that the time is monotonic.

Getting

go get -u github.com/tidwall/rtime

Using

Get the remote time with rtime.Now().

tm := rtime.Now()
if tm.IsZero() {
    panic("internet offline")
}
println(tm.String())
// output: 2020-03-29 10:27:00 -0700 MST
}

Stay in sync

The rtime.Now() will be a little slow, usually 200 ms or more, because it must make a round trip to three or more remote servers to determine the correct time.

You can make it fast like the built-in time.Now() by calling rtime.Sync() once at the start of your application.

if err := rtime.Sync(); err != nil {
    panic(err)
}
// All following rtime.Now() calls will now be quick and without the need for
// checking its result.
tm := rtime.Now()
println(tm.String())

It's a good idea to call rtime.Sync() at the top of the main() or init() functions.

Contact

Josh Baker @tidwall

License

Source code is available under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].