@@ -197,6 +197,85 @@ func TestFormatTsBackend(t *testing.T) {
197
197
}
198
198
}
199
199
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
+
200
279
func TestTimestampWithTimeZone (t * testing.T ) {
201
280
db := openTestConn (t )
202
281
defer db .Close ()
0 commit comments