From abacbd802482534aebdf58716ce370a6ca3b063c Mon Sep 17 00:00:00 2001 From: Aaron Raddon Date: Mon, 15 Dec 2014 11:20:40 -0800 Subject: [PATCH] add another weird date format: 08/21/71 --- parseany.go | 18 ++++++++---------- parseany_test.go | 6 ++++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/parseany.go b/parseany.go index 5369023..a654bcb 100644 --- a/parseany.go +++ b/parseany.go @@ -36,6 +36,10 @@ const ( var _ = u.EMPTY +var ( + shortDates = []string{"01/02/2006", "1/2/2006", "06/01/02", "01/02/06"} +) + // Given an unknown date format, detect the type, parse, return time func ParseAny(datestr string) (time.Time, error) { @@ -391,19 +395,13 @@ iterRunes: } } } else { - if len(datestr) == len("01/02/2006") { - if t, err := time.Parse("01/02/2006", datestr); err == nil { + for _, parseFormat := range shortDates { + if t, err := time.Parse(parseFormat, datestr); err == nil { return t, nil - } else { - return time.Time{}, err - } - } else { - if t, err := time.Parse("1/2/2006", datestr); err == nil { - return t, nil - } else { - return time.Time{}, err } } + + return time.Time{}, fmt.Errorf("Unrecognized dateformat: %v", datestr) } case ST_DIGITSLASHWSCOLON: // starts digit then slash 02/ more digits/slashes then whitespace diff --git a/parseany_test.go b/parseany_test.go index 1fa0c00..5b8cb0f 100644 --- a/parseany_test.go +++ b/parseany_test.go @@ -103,6 +103,12 @@ func TestParse(t *testing.T) { //u.Debug(ts.In(time.UTC).Unix(), ts.In(time.UTC)) assert.T(t, "2014-03-31 00:00:00 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) + // what type of date is this? 08/21/71 + ts, err = ParseAny("08/21/71") + assert.Tf(t, err == nil, "%v", err) + //u.Debug(ts.In(time.UTC).Unix(), ts.In(time.UTC)) + assert.T(t, "1971-08-21 00:00:00 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) + ts, err = ParseAny("4/8/2014 22:05") assert.Tf(t, err == nil, "%v", err) //u.Debug(ts.In(time.UTC).Unix(), ts.In(time.UTC))