X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=tai64n.go;h=c4278354414c4f5dd5eb3ccacad8d6436aad98d3;hb=7e3898c0b58d68b5287f3437f721f967809de2a9;hp=e6dd28e7fd420cc9d3bc7c46b6115823efbe7c39;hpb=d5a14112bd34676379cd624868717148d93070a1;p=goredo.git diff --git a/tai64n.go b/tai64n.go index e6dd28e..c427835 100644 --- 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 }