+
+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() {
+ if err = scanner.Err(); err != nil {
+ return err
+ }
+ break
+ }
+ s = scanner.Text()
+
+ if s[0] != '@' {
+ dst.WriteString(s + "\n")
+ }
+ sep = strings.IndexByte(s, byte(' '))
+ if sep == -1 {
+ dst.WriteString(s + "\n")
+ }
+ ts, err = hex.DecodeString(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")
+ }
+ return nil
+}