aboutsummaryrefslogtreecommitdiffstats
path: root/tai64n/tai64n.go
diff options
context:
space:
mode:
Diffstat (limited to 'tai64n/tai64n.go')
-rw-r--r--tai64n/tai64n.go25
1 files changed, 17 insertions, 8 deletions
diff --git a/tai64n/tai64n.go b/tai64n/tai64n.go
index 565aaa4..8f10b39 100644
--- a/tai64n/tai64n.go
+++ b/tai64n/tai64n.go
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: MIT
*
- * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
+ * Copyright (C) 2017-2023 WireGuard LLC. All Rights Reserved.
*/
package tai64n
@@ -11,22 +11,31 @@ import (
"time"
)
-const TimestampSize = 12
-const base = uint64(0x400000000000000a)
-const whitenerMask = uint32(0x1000000 - 1)
+const (
+ TimestampSize = 12
+ base = uint64(0x400000000000000a)
+ whitenerMask = uint32(0x1000000 - 1)
+)
type Timestamp [TimestampSize]byte
-func Now() Timestamp {
+func stamp(t time.Time) Timestamp {
var tai64n Timestamp
- now := time.Now()
- secs := base + uint64(now.Unix())
- nano := uint32(now.Nanosecond()) &^ whitenerMask
+ secs := base + uint64(t.Unix())
+ nano := uint32(t.Nanosecond()) &^ whitenerMask
binary.BigEndian.PutUint64(tai64n[:], secs)
binary.BigEndian.PutUint32(tai64n[8:], nano)
return tai64n
}
+func Now() Timestamp {
+ return stamp(time.Now())
+}
+
func (t1 Timestamp) After(t2 Timestamp) bool {
return bytes.Compare(t1[:], t2[:]) > 0
}
+
+func (t Timestamp) String() string {
+ return time.Unix(int64(binary.BigEndian.Uint64(t[:8])-base), int64(binary.BigEndian.Uint32(t[8:12]))).String()
+}