Add binary encoding for timestamptz
This commit is contained in:
+17
-2
@@ -96,8 +96,9 @@ func init() {
|
||||
|
||||
// timestamptz
|
||||
ValueTranscoders[Oid(1184)] = &ValueTranscoder{
|
||||
DecodeText: decodeTimestampTzFromText,
|
||||
EncodeTo: encodeTimestampTz}
|
||||
DecodeText: decodeTimestampTzFromText,
|
||||
DecodeBinary: decodeTimestampTzFromBinary,
|
||||
EncodeTo: encodeTimestampTz}
|
||||
|
||||
// use text transcoder for anything we don't understand
|
||||
defaultTranscoder = ValueTranscoders[Oid(25)]
|
||||
@@ -299,6 +300,20 @@ func decodeTimestampTzFromText(mr *MessageReader, size int32) interface{} {
|
||||
return t
|
||||
}
|
||||
|
||||
func decodeTimestampTzFromBinary(mr *MessageReader, size int32) interface{} {
|
||||
if size != 8 {
|
||||
panic("Received an invalid size for an int8")
|
||||
}
|
||||
microsecFromUnixEpochToY2K := int64(946684800 * 1000000)
|
||||
microsecSinceY2K := mr.ReadInt64()
|
||||
microsecSinceUnixEpoch := microsecFromUnixEpochToY2K + microsecSinceY2K
|
||||
return time.Unix(microsecSinceUnixEpoch/1000000, (microsecSinceUnixEpoch%1000000)*1000)
|
||||
|
||||
// 2000-01-01 00:00:00 in 946684800
|
||||
// 946684800 * 1000000
|
||||
|
||||
}
|
||||
|
||||
func encodeTimestampTz(w *MessageWriter, value interface{}) {
|
||||
t := value.(time.Time)
|
||||
s := t.Format("2006-01-02 15:04:05.999999 -0700")
|
||||
|
||||
Reference in New Issue
Block a user