2
0

Add binary encoding for timestamptz

This commit is contained in:
Jack Christensen
2013-07-19 14:40:07 -05:00
parent faed7f2879
commit 9e321af35c
2 changed files with 75 additions and 2 deletions
+17 -2
View File
@@ -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")