@@ -197,6 +197,85 @@ func TestFormatTsBackend(t *testing.T) {
197197 }
198198}
199199
200+ func TestTimeWithoutTimezone (t * testing.T ) {
201+ db := openTestConn (t )
202+ defer db .Close ()
203+
204+ tx , err := db .Begin ()
205+ if err != nil {
206+ t .Fatal (err )
207+ }
208+ defer tx .Rollback ()
209+
210+ for _ , tc := range []struct {
211+ refTime string
212+ expectedTime time.Time
213+ }{
214+ {"11:59:59" , time .Date (0 , 1 , 1 , 11 , 59 , 59 , 0 , time .UTC )},
215+ {"24:00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
216+ {"24:00:00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
217+ {"24:00:00.0" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
218+ {"24:00:00.000000" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
219+ } {
220+ t .Run (
221+ fmt .Sprintf ("%s => %s" , tc .refTime , tc .expectedTime .Format (time .RFC3339 )),
222+ func (t * testing.T ) {
223+ var gotTime time.Time
224+ row := tx .QueryRow ("select $1::time" , tc .refTime )
225+ err = row .Scan (& gotTime )
226+ if err != nil {
227+ t .Fatal (err )
228+ }
229+
230+ if ! tc .expectedTime .Equal (gotTime ) {
231+ t .Errorf ("timestamps not equal: %s != %s" , tc .expectedTime , gotTime )
232+ }
233+ },
234+ )
235+ }
236+ }
237+
238+ func TestTimeWithTimezone (t * testing.T ) {
239+ db := openTestConn (t )
240+ defer db .Close ()
241+
242+ tx , err := db .Begin ()
243+ if err != nil {
244+ t .Fatal (err )
245+ }
246+ defer tx .Rollback ()
247+
248+ for _ , tc := range []struct {
249+ refTime string
250+ expectedTime time.Time
251+ }{
252+ {"11:59:59+00:00" , time .Date (0 , 1 , 1 , 11 , 59 , 59 , 0 , time .UTC )},
253+ {"11:59:59+04:00" , time .Date (0 , 1 , 1 , 11 , 59 , 59 , 0 , time .FixedZone ("+04" , 4 * 60 * 60 ))},
254+ {"24:00+00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
255+ {"24:00Z" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
256+ {"24:00-04:00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .FixedZone ("-04" , - 4 * 60 * 60 ))},
257+ {"24:00:00+00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
258+ {"24:00:00.0+00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
259+ {"24:00:00.000000+00" , time .Date (0 , 1 , 2 , 0 , 0 , 0 , 0 , time .UTC )},
260+ } {
261+ t .Run (
262+ fmt .Sprintf ("%s => %s" , tc .refTime , tc .expectedTime .Format (time .RFC3339 )),
263+ func (t * testing.T ) {
264+ var gotTime time.Time
265+ row := tx .QueryRow ("select $1::timetz" , tc .refTime )
266+ err = row .Scan (& gotTime )
267+ if err != nil {
268+ t .Fatal (err )
269+ }
270+
271+ if ! tc .expectedTime .Equal (gotTime ) {
272+ t .Errorf ("timestamps not equal: %s != %s" , tc .expectedTime , gotTime )
273+ }
274+ },
275+ )
276+ }
277+ }
278+
200279func TestTimestampWithTimeZone (t * testing.T ) {
201280 db := openTestConn (t )
202281 defer db .Close ()
0 commit comments