time: fixed handling of "5" in Format's layout string

Fixes #12440

Change-Id: Iead77fe34d986cfd5c16bac671fe13c8d012a754
Reviewed-on: https://go-review.googlesource.com/14178
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/time/format.go b/src/time/format.go
index 873d3ff..6cf7946 100644
--- a/src/time/format.go
+++ b/src/time/format.go
@@ -518,7 +518,7 @@
 		case stdZeroMinute:
 			b = appendInt(b, min, 2)
 		case stdSecond:
-			b = appendInt(b, sec, 2)
+			b = appendInt(b, sec, 0)
 		case stdZeroSecond:
 			b = appendInt(b, sec, 2)
 		case stdPM:
diff --git a/src/time/format_test.go b/src/time/format_test.go
index ecc5c8f..d44347a 100644
--- a/src/time/format_test.go
+++ b/src/time/format_test.go
@@ -74,6 +74,16 @@
 	}
 }
 
+// issue 12440.
+func TestFormatSingleDigits(t *testing.T) {
+	time := Date(2001, 2, 3, 4, 5, 6, 700000000, UTC)
+	test := FormatTest{"single digit format", "3:4:5", "4:5:6"}
+	result := time.Format(test.format)
+	if result != test.result {
+		t.Errorf("%s expected %q got %q", test.name, test.result, result)
+	}
+}
+
 func TestFormatShortYear(t *testing.T) {
 	years := []int{
 		-100001, -100000, -99999,