From 4f9dbf802bbba4058bc484f019107aeb4a5bbba6 Mon Sep 17 00:00:00 2001 From: Aaron Raddon Date: Fri, 3 Jul 2015 10:27:48 -0700 Subject: [PATCH] new date format for weird long date --- parseany.go | 30 ++++++++++++++++++++++++------ parseany_test.go | 6 ++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/parseany.go b/parseany.go index 0acc476..e23de0c 100644 --- a/parseany.go +++ b/parseany.go @@ -232,6 +232,7 @@ iterRunes: // Monday, 02-Jan-06 15:04:05 MST // Mon, 02 Jan 2006 15:04:05 MST // Mon, 02 Jan 2006 15:04:05 -0700 + // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) if unicode.IsLetter(r) { continue } @@ -244,6 +245,11 @@ iterRunes: // state = ST_ALPHADIGIT } case ST_ALPHAWS: // Starts alpha then whitespace + // May 8, 2009 5:57:51 PM + // Mon Jan _2 15:04:05 2006 + // Mon Jan _2 15:04:05 MST 2006 + // Mon Jan 02 15:04:05 -0700 2006 + // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) switch { // case r == ' ': // state = ST_ALPHAWSWS @@ -276,30 +282,42 @@ iterRunes: //u.Error(err) } case ST_ALPHAWSALPHA: // Starts Alpha, whitespace, alpha - // ANSIC = "Mon Jan _2 15:04:05 2006" - // UnixDate = "Mon Jan _2 15:04:05 MST 2006" - // RubyDate = "Mon Jan 02 15:04:05 -0700 2006" - if len(datestr) == len("Mon Jan _2 15:04:05 2006") { + // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) + // Mon Jan _2 15:04:05 2006 + // Mon Jan _2 15:04:05 MST 2006 + // Mon Jan 02 15:04:05 -0700 2006 + switch { + case len(datestr) == len("Mon Jan _2 15:04:05 2006"): if t, err := time.Parse(time.ANSIC, datestr); err == nil { return t, nil } else { //break iterRunes return time.Time{}, err } - } else if len(datestr) == len("Mon Jan _2 15:04:05 MST 2006") { + case len(datestr) == len("Mon Jan _2 15:04:05 MST 2006"): if t, err := time.Parse(time.UnixDate, datestr); err == nil { return t, nil } else { //break iterRunes return time.Time{}, err } - } else if len(datestr) == len("Mon Jan 02 15:04:05 -0700 2006") { + case len(datestr) == len("Mon Jan 02 15:04:05 -0700 2006"): if t, err := time.Parse(time.RubyDate, datestr); err == nil { return t, nil } else { //break iterRunes return time.Time{}, err } + case len(datestr) > len("Mon Jan 02 2006 15:04:05 MST-0700"): + // What effing time stamp is this? + // Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) + dateTmp := datestr[:33] + if t, err := time.Parse("Mon Jan 02 2006 15:04:05 MST-0700", dateTmp); err == nil { + return t, nil + } else { + //break iterRunes + return time.Time{}, err + } } default: //u.Infof("no case for: %d", state) diff --git a/parseany_test.go b/parseany_test.go index 329442d..f8fc9e4 100644 --- a/parseany_test.go +++ b/parseany_test.go @@ -84,6 +84,12 @@ func TestParse(t *testing.T) { //u.Debug(fmt.Sprintf("%v", ts.In(time.UTC)), " ---- ", ts) assert.T(t, "2006-01-02 15:04:05 +0000 MST" == fmt.Sprintf("%v", ts)) + // Easily the worst Date format i have ever seen + // "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)" + ts, err = ParseAny("Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)") + //u.Debug(fmt.Sprintf("%v", ts.In(time.UTC)), " ---- ", ts.In(time.UTC)) + assert.T(t, "2015-07-03 17:04:07 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) + // Golang Native Format ts, err = ParseAny("2015-02-18 00:12:00 +0000 UTC") assert.Tf(t, err == nil, "%v", err)