Unixnano time format support (#454)
Co-authored-by: Лазаренков Егор Алексеевич <ealazarenkov@sberbank.ru>
This commit is contained in:
parent
43be301386
commit
4c85986254
|
@ -19,6 +19,10 @@ const (
|
||||||
// TimeFormatUnixMicro defines a time format that makes time fields to be
|
// TimeFormatUnixMicro defines a time format that makes time fields to be
|
||||||
// serialized as Unix timestamp integers in microseconds.
|
// serialized as Unix timestamp integers in microseconds.
|
||||||
TimeFormatUnixMicro = "UNIXMICRO"
|
TimeFormatUnixMicro = "UNIXMICRO"
|
||||||
|
|
||||||
|
// TimeFormatUnixNano defines a time format that makes time fields to be
|
||||||
|
// serialized as Unix timestamp integers in nanoseconds.
|
||||||
|
TimeFormatUnixNano = "UNIXNANO"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -81,7 +85,7 @@ var (
|
||||||
InterfaceMarshalFunc = json.Marshal
|
InterfaceMarshalFunc = json.Marshal
|
||||||
|
|
||||||
// TimeFieldFormat defines the time format of the Time field type. If set to
|
// TimeFieldFormat defines the time format of the Time field type. If set to
|
||||||
// TimeFormatUnix, TimeFormatUnixMs or TimeFormatUnixMicro, the time is formatted as a UNIX
|
// TimeFormatUnix, TimeFormatUnixMs, TimeFormatUnixMicro or TimeFormatUnixNano, the time is formatted as a UNIX
|
||||||
// timestamp as integer.
|
// timestamp as integer.
|
||||||
TimeFieldFormat = time.RFC3339
|
TimeFieldFormat = time.RFC3339
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ const (
|
||||||
timeFormatUnix = ""
|
timeFormatUnix = ""
|
||||||
timeFormatUnixMs = "UNIXMS"
|
timeFormatUnixMs = "UNIXMS"
|
||||||
timeFormatUnixMicro = "UNIXMICRO"
|
timeFormatUnixMicro = "UNIXMICRO"
|
||||||
|
timeFormatUnixNano = "UNIXNANO"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AppendTime formats the input time with the given format
|
// AppendTime formats the input time with the given format
|
||||||
|
@ -22,6 +23,8 @@ func (e Encoder) AppendTime(dst []byte, t time.Time, format string) []byte {
|
||||||
return e.AppendInt64(dst, t.UnixNano()/1000000)
|
return e.AppendInt64(dst, t.UnixNano()/1000000)
|
||||||
case timeFormatUnixMicro:
|
case timeFormatUnixMicro:
|
||||||
return e.AppendInt64(dst, t.UnixNano()/1000)
|
return e.AppendInt64(dst, t.UnixNano()/1000)
|
||||||
|
case timeFormatUnixNano:
|
||||||
|
return e.AppendInt64(dst, t.UnixNano())
|
||||||
}
|
}
|
||||||
return append(t.AppendFormat(append(dst, '"'), format), '"')
|
return append(t.AppendFormat(append(dst, '"'), format), '"')
|
||||||
}
|
}
|
||||||
|
@ -33,7 +36,11 @@ func (Encoder) AppendTimes(dst []byte, vals []time.Time, format string) []byte {
|
||||||
case timeFormatUnix:
|
case timeFormatUnix:
|
||||||
return appendUnixTimes(dst, vals)
|
return appendUnixTimes(dst, vals)
|
||||||
case timeFormatUnixMs:
|
case timeFormatUnixMs:
|
||||||
return appendUnixMsTimes(dst, vals)
|
return appendUnixNanoTimes(dst, vals, 1000000)
|
||||||
|
case timeFormatUnixMicro:
|
||||||
|
return appendUnixNanoTimes(dst, vals, 1000)
|
||||||
|
case timeFormatUnixNano:
|
||||||
|
return appendUnixNanoTimes(dst, vals, 1)
|
||||||
}
|
}
|
||||||
if len(vals) == 0 {
|
if len(vals) == 0 {
|
||||||
return append(dst, '[', ']')
|
return append(dst, '[', ']')
|
||||||
|
@ -64,15 +71,15 @@ func appendUnixTimes(dst []byte, vals []time.Time) []byte {
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
func appendUnixMsTimes(dst []byte, vals []time.Time) []byte {
|
func appendUnixNanoTimes(dst []byte, vals []time.Time, div int64) []byte {
|
||||||
if len(vals) == 0 {
|
if len(vals) == 0 {
|
||||||
return append(dst, '[', ']')
|
return append(dst, '[', ']')
|
||||||
}
|
}
|
||||||
dst = append(dst, '[')
|
dst = append(dst, '[')
|
||||||
dst = strconv.AppendInt(dst, vals[0].UnixNano()/1000000, 10)
|
dst = strconv.AppendInt(dst, vals[0].UnixNano()/div, 10)
|
||||||
if len(vals) > 1 {
|
if len(vals) > 1 {
|
||||||
for _, t := range vals[1:] {
|
for _, t := range vals[1:] {
|
||||||
dst = strconv.AppendInt(append(dst, ','), t.UnixNano()/1000000, 10)
|
dst = strconv.AppendInt(append(dst, ','), t.UnixNano()/div, 10)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dst = append(dst, ']')
|
dst = append(dst, ']')
|
||||||
|
|
Loading…
Reference in New Issue