/*
-go.cypherpunks.ru/tai64n -- Pure Go TAI64N implementation
-Copyright (C) 2020 Sergey Matveev <stargrave@stargrave.org>
+go.cypherpunks.ru/tai64n -- Pure Go TAI64/TAI64N implementation
+Copyright (C) 2020-2022 Sergey Matveev <stargrave@stargrave.org>
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
import (
"bufio"
+ "flag"
+ "fmt"
"log"
"os"
"strings"
"time"
- "go.cypherpunks.ru/tai64n"
+ "go.cypherpunks.ru/tai64n/v2"
)
func main() {
log.SetFlags(0)
+ flag.Usage = func() {
+ fmt.Fprintf(
+ flag.CommandLine.Output(),
+ "Replace \"@HEX(TAI64)\"-prefixed line with human readable UTC.\n",
+ )
+ flag.PrintDefaults()
+ }
+ leapsecs := flag.Bool("leapsecs", false, "Take leap seconds into account: honest TAI->UTC")
+ db := flag.String("leapsecsdb", "", "Use that leapsecs.dat leap seconds database")
+ flag.Parse()
+
+ if *db != "" {
+ buf, err := os.ReadFile(*db)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ tai64n.LeapsecsDBLoad(buf)
+ }
+
scanner := bufio.NewScanner(os.Stdin)
var err error
var s string
s = scanner.Text()
if s[0] != '@' {
os.Stdout.WriteString(s + "\n")
+ continue
}
sep = strings.IndexByte(s, byte(' '))
if sep == -1 {
os.Stdout.WriteString(s + "\n")
+ continue
}
t, err = tai64n.Decode(s[1:sep])
if err != nil {
log.Fatalln(err)
}
+ if *leapsecs {
+ t = tai64n.LeapsecsSub(t)
+ }
os.Stdout.WriteString(t.Format(tai64n.LocalFmt) + s[sep:] + "\n")
}
}