diff --git a/src/pkg/time/format.go b/src/pkg/time/format.go index 7b5a8f3b67f..4b427f9d75f 100644 --- a/src/pkg/time/format.go +++ b/src/pkg/time/format.go @@ -272,9 +272,18 @@ func (t *Time) Format(layout string) string { case stdHour: p = zeroPad(t.Hour) case stdHour12: - p = strconv.Itoa(t.Hour % 12) + // Noon is 12PM. + if t.Hour == 12 { + p = "12" + } else { + p = strconv.Itoa(t.Hour % 12) + } case stdZeroHour12: - p = zeroPad(t.Hour % 12) + if t.Hour == 12 { + p = "12" + } else { + p = zeroPad(t.Hour % 12) + } case stdMinute: p = strconv.Itoa(t.Minute) case stdZeroMinute: diff --git a/src/pkg/time/time_test.go b/src/pkg/time/time_test.go index 1d83291c097..9c70ad1cc19 100644 --- a/src/pkg/time/time_test.go +++ b/src/pkg/time/time_test.go @@ -302,6 +302,36 @@ func TestParseErrors(t *testing.T) { } } +func TestNoonIs12PM(t *testing.T) { + noon := Time{Hour: 12} + const expect = "12:00PM" + got := noon.Format("3:04PM") + if got != expect { + t.Errorf("got %q; expect %q", got, expect) + } + got = noon.Format("03:04PM") + if got != expect { + t.Errorf("got %q; expect %q", got, expect) + } +} + +func Test12PMIsNoon(t *testing.T) { + noon, err := Parse("3:04PM", "12:00PM") + if err != nil { + t.Fatal("error parsing date:", err) + } + if noon.Hour != 12 { + t.Errorf("got %d; expect 12", noon.Hour) + } + noon, err = Parse("03:04PM", "12:00PM") + if err != nil { + t.Fatal("error parsing date:", err) + } + if noon.Hour != 12 { + t.Errorf("got %d; expect 12", noon.Hour) + } +} + // Check that a time without a Zone still produces a (numeric) time zone // when formatted with MST as a requested zone. func TestMissingZone(t *testing.T) {