github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/pkg/tslib/tots.go (about) 1 package tslib 2 3 import ( 4 "strings" 5 6 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" 7 "github.com/bykof/gostradamus" 8 ) 9 10 // FromBnToTs returns a chain-specific Linux timestamp given a block number 11 func FromBnToTs(chain string, bn base.Blknum) (base.Timestamp, error) { 12 ret, err := FromBn(chain, bn) 13 return base.Timestamp(ret.Ts), err 14 } 15 16 // FromDateToTs returns a Linux timestamp given a date string (not chain-specific) 17 func FromDateToTs(dateStr string) (base.Timestamp, error) { 18 str := toIsoDateStr(dateStr) 19 t, err := gostradamus.Parse(str, gostradamus.Iso8601) 20 if err != nil { 21 return 0, err 22 } 23 return base.Timestamp(t.UnixTimestamp()), nil 24 } 25 26 func toIsoDateStr(dateStr string) string { 27 // assumes an already validated date string 28 str := strings.Replace(dateStr, "T", " ", -1) 29 if strings.Count(str, ":") == 0 { 30 if strings.Count(str, " ") == 1 { 31 str += ":00:00" 32 } else { 33 str += " 00:00:00" 34 } 35 } else if strings.Count(str, ":") == 1 { 36 str += ":00" 37 } 38 str = strings.Replace(str, " ", "T", -1) 39 str += ".000000" 40 return str 41 }