Skip to content
This repository was archived by the owner on Jul 12, 2025. It is now read-only.

Commit 69882d2

Browse files
jozolamjackc
authored andcommitted
fix: BC for timestamp
1 parent 9f958ba commit 69882d2

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

timestamp.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"database/sql/driver"
55
"encoding/binary"
66
"fmt"
7+
"strings"
78
"time"
89

910
"github.com/jackc/pgio"
@@ -118,6 +119,15 @@ func (dst *Timestamp) DecodeText(ci *ConnInfo, src []byte) error {
118119
case "-infinity":
119120
*dst = Timestamp{Status: Present, InfinityModifier: -Infinity}
120121
default:
122+
if strings.HasSuffix(sbuf, " BC") {
123+
t, err := time.Parse(pgTimestampFormat, strings.TrimRight(sbuf, " BC"))
124+
t2 := time.Date(1-t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), t.Location())
125+
if err != nil {
126+
return err
127+
}
128+
*dst = Timestamp{Time: t2, Status: Present}
129+
return nil
130+
}
121131
tim, err := time.Parse(pgTimestampFormat, sbuf)
122132
if err != nil {
123133
return err

timestamp_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ func TestTimestampSet(t *testing.T) {
124124
{source: pgtype.Infinity, result: pgtype.Timestamp{InfinityModifier: pgtype.Infinity, Status: pgtype.Present}},
125125
{source: pgtype.NegativeInfinity, result: pgtype.Timestamp{InfinityModifier: pgtype.NegativeInfinity, Status: pgtype.Present}},
126126
{source: "2001-04-05 06:07:08", result: pgtype.Timestamp{Time: time.Date(2001, 4, 5, 6, 7, 8, 0, time.UTC), Status: pgtype.Present}},
127+
{source: "0001-01-01 00:00:00.000000000 BC", result: pgtype.Timestamp{Time: time.Date(0000, 01, 01, 0, 0, 0, 0, time.UTC), Status: pgtype.Present}},
127128
}
128129

129130
for i, tt := range successfulTests {

0 commit comments

Comments
 (0)