Skip to content

Commit 2aa37a1

Browse files
committed
improved date formatting with inspiration from strconv
1 parent dc9e515 commit 2aa37a1

File tree

1 file changed

+22
-21
lines changed

1 file changed

+22
-21
lines changed

utils.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,8 @@ var zeroDateTime = []byte("0000-00-00 00:00:00.000000")
523523
func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value, error) {
524524
// length expects the deterministic length of the zero value,
525525
// negative time and 100+ hours are automatically added if needed
526-
const pairs = "00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"
526+
const digits01 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
527+
const digits10 = "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
527528
if len(src) == 0 {
528529
if justTime {
529530
return zeroDateTime[11 : 11+length], nil
@@ -555,7 +556,7 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
555556
hour := uint16(src[1])*24 + uint16(src[5])
556557
pt = byte(hour / 100)
557558
p1 = byte(hour - 100*uint16(pt))
558-
dst = append(dst, '0'+pt)
559+
dst = append(dst, digits01[pt])
559560
} else {
560561
p1 = src[5]
561562
}
@@ -587,10 +588,10 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
587588
p1 = byte(year - 100*uint16(pt))
588589
p2, p3 = src[2], src[3]
589590
dst = append(dst,
590-
pairs[2*pt], pairs[2*pt+1],
591-
pairs[2*p1], pairs[2*p1+1], '-',
592-
pairs[2*p2], pairs[2*p2+1], '-',
593-
pairs[2*p3], pairs[2*p3+1],
591+
digits10[pt], digits01[pt],
592+
digits10[p1], digits01[p1], '-',
593+
digits10[p2], digits01[p2], '-',
594+
digits10[p3], digits01[p3],
594595
)
595596
if length == 10 {
596597
return dst, nil
@@ -605,9 +606,9 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
605606
// p1 is 2-digit hour, src is after hour
606607
p2, p3 = src[0], src[1]
607608
dst = append(dst,
608-
pairs[2*p1], pairs[2*p1+1], ':',
609-
pairs[2*p2], pairs[2*p2+1], ':',
610-
pairs[2*p3], pairs[2*p3+1],
609+
digits10[p1], digits01[p1], ':',
610+
digits10[p2], digits01[p2], ':',
611+
digits10[p3], digits01[p3],
611612
)
612613
if length <= byte(len(dst)) {
613614
return dst, nil
@@ -625,33 +626,33 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
625626
switch decimals := zOffs + length - 20; decimals {
626627
default:
627628
return append(dst, '.',
628-
pairs[2*p1], pairs[2*p1+1],
629-
pairs[2*p2], pairs[2*p2+1],
630-
pairs[2*p3], pairs[2*p3+1],
629+
digits10[p1], digits01[p1],
630+
digits10[p2], digits01[p2],
631+
digits10[p3], digits01[p3],
631632
), nil
632633
case 1:
633634
return append(dst, '.',
634-
pairs[2*p1],
635+
digits10[p1],
635636
), nil
636637
case 2:
637638
return append(dst, '.',
638-
pairs[2*p1], pairs[2*p1+1],
639+
digits10[p1], digits01[p1],
639640
), nil
640641
case 3:
641642
return append(dst, '.',
642-
pairs[2*p1], pairs[2*p1+1],
643-
pairs[2*p2],
643+
digits10[p1], digits01[p1],
644+
digits10[p2],
644645
), nil
645646
case 4:
646647
return append(dst, '.',
647-
pairs[2*p1], pairs[2*p1+1],
648-
pairs[2*p2], pairs[2*p2+1],
648+
digits10[p1], digits01[p1],
649+
digits10[p2], digits01[p2],
649650
), nil
650651
case 5:
651652
return append(dst, '.',
652-
pairs[2*p1], pairs[2*p1+1],
653-
pairs[2*p2], pairs[2*p2+1],
654-
pairs[2*p3],
653+
digits10[p1], digits01[p1],
654+
digits10[p2], digits01[p2],
655+
digits10[p3],
655656
), nil
656657
}
657658
}

0 commit comments

Comments
 (0)