@@ -828,6 +828,43 @@ func TestAppendEscapedTextExistingBuffer(t *testing.T) {
828828 }
829829}
830830
831+ var formatAndParseTimestamp = []struct {
832+ time time.Time
833+ expected string
834+ }{
835+ {time.Time {}, "0001-01-01 00:00:00Z" },
836+ {time .Date (2001 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , 0 )), "2001-02-03 04:05:06.123456789Z" },
837+ {time .Date (2001 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , 2 * 60 * 60 )), "2001-02-03 04:05:06.123456789+02:00" },
838+ {time .Date (2001 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , - 6 * 60 * 60 )), "2001-02-03 04:05:06.123456789-06:00" },
839+ {time .Date (2001 , time .February , 3 , 4 , 5 , 6 , 0 , time .FixedZone ("" , - (7 * 60 * 60 + 30 * 60 + 9 ))), "2001-02-03 04:05:06-07:30:09" },
840+
841+ {time .Date (1 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , 0 )), "0001-02-03 04:05:06.123456789Z" },
842+ {time .Date (1 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , 2 * 60 * 60 )), "0001-02-03 04:05:06.123456789+02:00" },
843+ {time .Date (1 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , - 6 * 60 * 60 )), "0001-02-03 04:05:06.123456789-06:00" },
844+
845+ {time .Date (0 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , 0 )), "0001-02-03 04:05:06.123456789Z BC" },
846+ {time .Date (0 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , 2 * 60 * 60 )), "0001-02-03 04:05:06.123456789+02:00 BC" },
847+ {time .Date (0 , time .February , 3 , 4 , 5 , 6 , 123456789 , time .FixedZone ("" , - 6 * 60 * 60 )), "0001-02-03 04:05:06.123456789-06:00 BC" },
848+
849+ {time .Date (1 , time .February , 3 , 4 , 5 , 6 , 0 , time .FixedZone ("" , - (7 * 60 * 60 + 30 * 60 + 9 ))), "0001-02-03 04:05:06-07:30:09" },
850+ {time .Date (0 , time .February , 3 , 4 , 5 , 6 , 0 , time .FixedZone ("" , - (7 * 60 * 60 + 30 * 60 + 9 ))), "0001-02-03 04:05:06-07:30:09 BC" },
851+ }
852+
853+ func TestFormatAndParseTimestamp (t * testing.T ) {
854+ for _ , val := range formatAndParseTimestamp {
855+ formattedTime := FormatTimestamp (val .time )
856+ parsedTime , err := ParseTimestamp (nil , string (formattedTime ))
857+
858+ if err != nil {
859+ t .Errorf ("invalid parsing, err: %v" , err .Error ())
860+ }
861+
862+ if val .time .UTC () != parsedTime .UTC () {
863+ t .Errorf ("invalid parsing from formatted timestamp, got %v; expected %v" , parsedTime .String (), val .time .String ())
864+ }
865+ }
866+ }
867+
831868func BenchmarkAppendEscapedText (b * testing.B ) {
832869 longString := ""
833870 for i := 0 ; i < 100 ; i ++ {
0 commit comments