parser/shared/type.go

57 lines
1.0 KiB
Go

package shared
import (
"strconv"
"strings"
"time"
)
// UnixTimestamp is a time.Time that can parse unix timestamps
type UnixTimestamp time.Time
// UnmarshalText implements encoding.TextUnmarshaler
func (t *UnixTimestamp) UnmarshalText(b []byte) error {
i, err := strconv.ParseInt(string(b), 10, 64)
if err != nil {
return err
}
var tt time.Time
if len(b) > 10 {
tt = time.Unix(0, i)
} else {
tt = time.Unix(i, 0)
}
*t = UnixTimestamp(tt)
return nil
}
// UnmarshalJSON implements json.Unmarshaler
func (t *UnixTimestamp) UnmarshalJSON(b []byte) error {
parts := strings.Split(string(b), `.`)
if len(parts) == 1 {
return t.UnmarshalText(b)
}
i, err := strconv.ParseInt(parts[0], 10, 64)
if err != nil {
return err
}
inano, err := strconv.ParseInt(parts[1], 10, 64)
if err != nil {
return err
}
var tt time.Time
tt = time.Unix(i, inano*100)
*t = UnixTimestamp(tt)
return nil
}
func (t UnixTimestamp) String() string {
return time.Time(t).Format(`2006-01-02 15:04:05.999999`)
}