From dd683a282f1b02438967936e85a8601f90f29400 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 10 Dec 2020 19:36:29 +0300 Subject: [PATCH] cmd/tai64nlocal --- README | 8 ++++++ cmd/tai64nlocal/main.go | 58 +++++++++++++++++++++++++++++++++++++++++ tai64n.go | 6 ++--- 3 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 cmd/tai64nlocal/main.go diff --git a/README b/README index ad333a5..21988c8 100644 --- a/README +++ b/README @@ -1 +1,9 @@ Pure Go TAI64N (http://cr.yp.to/libtai/tai64.html) implementation. +cmd/tai64nlocal contains similar to DJB's one utility. +Example TAI64N creation: + + import "go.cypherpunks.ru/tai64n" + + tai := new(tai64n.TAI64N) + tai64n.FromTime(time.Now(), tai) + println(tai.Encode()) // @400000005fd24ce33323c4d1 diff --git a/cmd/tai64nlocal/main.go b/cmd/tai64nlocal/main.go new file mode 100644 index 0000000..2f3ed15 --- /dev/null +++ b/cmd/tai64nlocal/main.go @@ -0,0 +1,58 @@ +/* +go.cypherpunks.ru/tai64n -- Pure Go TAI64N implementation +Copyright (C) 2020 Sergey Matveev + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +package main + +import ( + "bufio" + "log" + "os" + "strings" + "time" + + "go.cypherpunks.ru/tai64n" +) + +func main() { + log.SetFlags(0) + scanner := bufio.NewScanner(os.Stdin) + var err error + var s string + var sep int + var t time.Time + for { + if !scanner.Scan() { + if err = scanner.Err(); err != nil { + log.Fatalln(err) + } + break + } + s = scanner.Text() + if s[0] != '@' { + os.Stdout.WriteString(s + "\n") + } + sep = strings.IndexByte(s, byte(' ')) + if sep == -1 { + os.Stdout.WriteString(s + "\n") + } + t, err = tai64n.Decode(s[1:sep]) + if err != nil { + log.Fatalln(err) + } + os.Stdout.WriteString(t.Format(tai64n.LocalFmt) + s[sep:] + "\n") + } +} diff --git a/tai64n.go b/tai64n.go index 34a63d1..5087361 100644 --- a/tai64n.go +++ b/tai64n.go @@ -33,9 +33,9 @@ const ( type TAI64N [Size]byte -func FromTime(t time.Time, tai *TAI64N) { - binary.BigEndian.PutUint64(tai[:], uint64(Base)+uint64(t.Unix())) - binary.BigEndian.PutUint32(tai[8:], uint32(t.Nanosecond())) +func FromTime(src time.Time, dst *TAI64N) { + binary.BigEndian.PutUint64(dst[:], uint64(Base)+uint64(src.Unix())) + binary.BigEndian.PutUint32(dst[8:], uint32(src.Nanosecond())) } func ToTime(tai []byte) time.Time { -- 2.44.0