]> Cypherpunks.ru repositories - goredo.git/blobdiff - tai64n.go
Move tai64n to separate module
[goredo.git] / tai64n.go
index e6dd28e7fd420cc9d3bc7c46b6115823efbe7c39..c4278354414c4f5dd5eb3ccacad8d6436aad98d3 100644 (file)
--- a/tai64n.go
+++ b/tai64n.go
@@ -19,36 +19,18 @@ package main
 
 import (
        "bufio"
-       "encoding/binary"
-       "encoding/hex"
-       "errors"
        "io"
        "strings"
        "time"
-)
 
-const (
-       TAI64NSize     = 12
-       TAI64NBase     = 0x400000000000000a
-       TAI64NLocalFmt = "2006-01-02 15:04:05.000000000"
+       "go.cypherpunks.ru/tai64n"
 )
 
-type TAI64N [TAI64NSize]byte
-
-func tai64nNow(ts *TAI64N) {
-       t := time.Now()
-       binary.BigEndian.PutUint64(ts[:], uint64(TAI64NBase)+uint64(t.Unix()))
-       binary.BigEndian.PutUint32(ts[8:], uint32(t.Nanosecond()))
-}
-
 func tai64nLocal(dst io.StringWriter, src io.Reader) error {
        scanner := bufio.NewScanner(src)
        var err error
        var s string
        var sep int
-       var ts []byte
-       var secs int64
-       var nano int64
        var t time.Time
        for {
                if !scanner.Scan() {
@@ -66,17 +48,11 @@ func tai64nLocal(dst io.StringWriter, src io.Reader) error {
                if sep == -1 {
                        dst.WriteString(s + "\n")
                }
-               ts, err = hex.DecodeString(s[1:sep])
+               t, err = tai64n.Decode(s[1:sep])
                if err != nil {
                        return err
                }
-               if len(ts) != TAI64NSize {
-                       return errors.New("invalid ts length")
-               }
-               secs = int64(binary.BigEndian.Uint64(ts[:8]))
-               nano = int64(binary.BigEndian.Uint32(ts[8:]))
-               t = time.Unix(secs-TAI64NBase, nano)
-               dst.WriteString(t.Format(TAI64NLocalFmt) + s[sep:] + "\n")
+               dst.WriteString(t.Format(tai64n.LocalFmt) + s[sep:] + "\n")
        }
        return nil
 }