36 lines
955 B
Go
36 lines
955 B
Go
|
package times
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// MinimumTick is the minimum supported time resolution. This has to be
|
||
|
// at least time.Second in order for the code below to work.
|
||
|
minimumTick = time.Millisecond
|
||
|
// second is the Time duration equivalent to one second.
|
||
|
second = int64(time.Second / minimumTick)
|
||
|
// The number of nanoseconds per minimum tick.
|
||
|
nanosPerTick = int64(minimumTick / time.Nanosecond)
|
||
|
|
||
|
// Earliest is the earliest Time representable. Handy for
|
||
|
// initializing a high watermark.
|
||
|
Earliest = Time(math.MinInt64)
|
||
|
// Latest is the latest Time representable. Handy for initializing
|
||
|
// a low watermark.
|
||
|
Latest = Time(math.MaxInt64)
|
||
|
)
|
||
|
|
||
|
type Time int64
|
||
|
|
||
|
// TimeFromUnixNano returns the Time equivalent to the Unix Time
|
||
|
// t provided in nanoseconds.
|
||
|
func TimeFromUnixNano(t int64) Time {
|
||
|
return Time(t / nanosPerTick)
|
||
|
}
|
||
|
|
||
|
func (t Time) Time() time.Time {
|
||
|
return time.Unix(int64(t)/second, (int64(t)%second)*nanosPerTick)
|
||
|
}
|