From 406d73876dc13bfe85215e7a9c32cd8396270256 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Fri, 27 May 2011 23:24:39 +1000 Subject: [PATCH] time: fix Format bug: noon is 12PM, not 0PM. Fixes #1882. R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/4556062 --- src/pkg/time/format.go | 13 +++++++++++-- src/pkg/time/time_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/pkg/time/format.go b/src/pkg/time/format.go index 7b5a8f3b67..4b427f9d75 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 1d83291c09..9c70ad1cc1 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) { -- 2.50.0